MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Qual è l'operatore $unwind in MongoDB?

Prima di tutto, benvenuto su MongoDB!

La cosa da ricordare è che MongoDB utilizza un approccio "NoSQL" all'archiviazione dei dati, quindi elimina i pensieri di selezioni, join, ecc. dalla tua mente. Il modo in cui archivia i tuoi dati è sotto forma di documenti e raccolte, il che consente un mezzo dinamico per aggiungere e ottenere i dati dalle tue posizioni di archiviazione.

Detto questo, per comprendere il concetto alla base del parametro $unwind, devi prima capire cosa sta dicendo il caso d'uso che stai cercando di citare. Il documento di esempio di 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 }
}

Nota come i tag siano in realtà una matrice di 3 elementi, in questo caso "divertente", "buono" e "divertente".

Quello che fa $unwind è permetterti 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, restituire un documento con solo quell'oggetto".

Pertanto, il risultato dell'esecuzione di quanto segue:

db.article.aggregate(
    { $project : {
        author : 1 ,
        title : 1 ,
        tags : 1
    }},
    { $unwind : "$tags" }
);

restituirebbe 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 nella matrice dei risultati è ciò che viene restituito nel valore dei tag. Se hai bisogno di un ulteriore riferimento su come funziona, ho incluso un link qui. Spero che questo aiuti e buona fortuna per la tua incursione in uno dei migliori sistemi NoSQL che ho incontrato finora.