MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Was ist der $unwind-Operator in MongoDB?

Zunächst einmal willkommen bei MongoDB!

Denken Sie daran, dass MongoDB einen „NoSQL“-Ansatz für die Datenspeicherung verwendet, also vergessen Sie die Gedanken an Auswahlen, Verknüpfungen usw. aus Ihrem Kopf. Ihre Daten werden in Form von Dokumenten und Sammlungen gespeichert, was ein dynamisches Hinzufügen und Abrufen der Daten von Ihren Speicherorten ermöglicht.

Um das Konzept hinter dem $unwind-Parameter zu verstehen, müssen Sie zunächst verstehen, was der Anwendungsfall aussagt, den Sie zu zitieren versuchen. Das Beispieldokument von mongodb.org sieht wie folgt aus:

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

Beachten Sie, dass Tags eigentlich ein Array aus 3 Elementen sind, in diesem Fall "Spaß", "Gut" und "Spaß".

Mit $unwind können Sie ein Dokument für jedes Element abziehen und das resultierende Dokument zurückgeben. Um sich dies in einem klassischen Ansatz vorzustellen, wäre es das Äquivalent von "für jedes Element im tags-Array ein Dokument mit nur zurückgeben". dieses Element".

Daher das Ergebnis der Ausführung des Folgenden:

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

würde die folgenden Dokumente zurückgeben:

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

Beachten Sie, dass sich im Ergebnisarray nur das ändert, was im Tag-Wert zurückgegeben wird. Wenn Sie eine zusätzliche Referenz zur Funktionsweise benötigen, habe ich hier einen Link eingefügt. Hoffentlich hilft das und viel Glück bei Ihrem Ausflug in eines der besten NoSQL-Systeme, die mir bisher begegnet sind.