sql >> Databasteknik >  >> NoSQL >> MongoDB

Vad är $unwind-operatören i MongoDB?

Först och främst, välkommen till MongoDB!

Saken att komma ihåg är att MongoDB använder sig av en "NoSQL"-metod för datalagring, så fördärva tankarna på urval, sammanfogningar, etc. från ditt sinne. Det sätt som den lagrar dina data på är i form av dokument och samlingar, vilket möjliggör ett dynamiskt sätt att lägga till och hämta data från dina lagringsplatser.

Med det sagt, för att förstå konceptet bakom parametern $unwind måste du först förstå vad användningsfallet som du försöker citera säger. Exempeldokumentet från mongodb.org är följande:

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

Lägg märke till hur taggar faktiskt är en uppsättning av 3 objekt, i det här fallet "roligt", "bra" och "roligt".

Vad $unwind gör är att låta dig dra av ett dokument för varje element och returnera det resulterande dokumentet. För att tänka på detta i ett klassiskt tillvägagångssätt skulle det vara motsvarigheten till "för varje objekt i taggarrayen, returnera ett dokument med endast den artikeln".

Alltså resultatet av att köra följande:

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

skulle returnera följande dokument:

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

Lägg märke till att det enda som ändras i resultatmatrisen är vad som returneras i taggvärdet. Om du behöver en ytterligare referens om hur detta fungerar, har jag inkluderat en länk här. Förhoppningsvis hjälper detta, och lycka till med ditt inhopp i ett av de bästa NoSQL-systemen som jag har stött på hittills.



  1. Hur man tar bort ett fält från ett MongoDB-dokument ($unset)

  2. Hur man använder Predis, hur man ställer in (dvs lagrar) en flerdimensionell associativ array?

  3. Unikt index i mongoose fungerar inte

  4. C# mongo-frågor med json-strängar