Първо, добре дошли в MongoDB!
Нещото, което трябва да запомните е, че MongoDB използва "NoSQL" подход за съхранение на данни, така че изчезнайте мислите за селектиране, присъединяване и т.н. от ума си. Начинът, по който съхранява вашите данни, е под формата на документи и колекции, което позволява динамични средства за добавяне и получаване на данните от местата ви за съхранение.
Като се има предвид това, за да разберете концепцията зад параметъра $unwind, първо трябва да разберете какво казва случаят на употреба, който се опитвате да цитирате. Примерният документ от mongodb.org е както следва:
{
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 }
}
Забележете как етикетите всъщност са масив от 3 елемента, в този случай са „забавни“, „добри“ и „забавни“.
Това, което прави $unwind, е да ви позволи да отлепите документ за всеки елемент и да връща получения документ. За да мислите за това в класически подход, би било еквивалентно на „за всеки елемент в масива с етикети, върнете документ само с този артикул".
По този начин резултатът от изпълнение на следното:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
ще върне следните документи:
{
"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
}
Забележете, че единственото нещо, което се променя в резултатния масив, е това, което се връща в стойността на етикетите. Ако имате нужда от допълнителна справка за това как работи това, включих линк тук. Надяваме се това да ви помогне и успех с набезите ви в една от най-добрите NoSQL системи, които съм срещал досега.