MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Qu'est-ce que l'opérateur $unwind dans MongoDB ?

Tout d'abord, bienvenue sur MongoDB !

La chose à retenir est que MongoDB utilise une approche "NoSQL" pour le stockage des données, alors oubliez les pensées de sélections, de jointures, etc. de votre esprit. La façon dont il stocke vos données se présente sous la forme de documents et de collections, ce qui permet un moyen dynamique d'ajouter et d'obtenir les données de vos emplacements de stockage.

Cela étant dit, afin de comprendre le concept derrière le paramètre $unwind, vous devez d'abord comprendre ce que dit le cas d'utilisation que vous essayez de citer. L'exemple de document de mongodb.org est le suivant :

{
 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 }
}

Remarquez comment les balises sont en fait un tableau de 3 éléments, dans ce cas étant "fun", "good" et "fun".

Ce que fait $unwind est de vous permettre de décoller un document pour chaque élément et de renvoyer ce document résultant. Pour penser à cela dans une approche classique, ce serait l'équivalent de "pour chaque élément du tableau de balises, renvoyer un document avec seulement cet article".

Ainsi, le résultat de l'exécution de ce qui suit :

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

renverrait les documents suivants :

{
     "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
}

Notez que la seule chose qui change dans le tableau de résultats est ce qui est renvoyé dans la valeur des balises. Si vous avez besoin d'une référence supplémentaire sur la façon dont cela fonctionne, j'ai inclus un lien ici. J'espère que cela vous aidera, et bonne chance avec votre incursion dans l'un des meilleurs systèmes NoSQL que j'ai rencontrés jusqu'à présent.