Prima di tutto, benvenuto in MongoDB!
La cosa da ricordare è che MongoDB utilizza un approccio "NoSQL" alla memorizzazione dei dati, quindi perisci dalla tua mente i pensieri di selezioni, join, ecc. Il modo in cui memorizza i dati è sotto forma di documenti e raccolte, il che consente un mezzo dinamico per aggiungere e ottenere i dati dalle posizioni di archiviazione.
Detto questo, per comprendere il concetto alla base del parametro $ unfind, devi prima capire qual è il caso d'uso che stai cercando di citare. Il documento di esempio da mongodb.org è il seguente:
{
title : "this is my title" ,
author : "bob" ,
posted : new Date () ,
pageViews : 5 ,
tags : [ "fun" , "good" , "fun" ] ,
comments : [
{ author :"joe" , text : "this is cool" } ,
{ author :"sam" , text : "this is bad" }
],
other : { foo : 5 }
}
Notare come i tag siano in realtà un array di 3 elementi, in questo caso "divertente", "buono" e "divertente".
Quello che fa $ unfind è consentire di staccare un documento per ogni elemento e restituire quel documento risultante. Pensare a questo in un approccio classico, sarebbe l'equivalente di "per ogni elemento nell'array di tag, restituisci un documento con solo quell'elemento".
Pertanto, il risultato dell'esecuzione di quanto segue:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
restituirà i seguenti documenti:
{
"result" : [
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "good"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
}
],
"OK" : 1
}
Si noti che l'unica cosa che cambia nell'array dei risultati è ciò che viene restituito nel valore del tag. Se hai bisogno di un ulteriore riferimento su come funziona, ho incluso un link qui . Spero che questo aiuti, e buona fortuna con la tua incursione in uno dei migliori sistemi NoSQL che ho incontrato finora.