Po pierwsze, witamy w MongoDB!
Należy pamiętać, że MongoDB stosuje podejście "NoSQL" do przechowywania danych, więc znikaj z głowy myśli o zaznaczeniach, złączeniach itp. Sposób, w jaki przechowuje dane, ma postać dokumentów i zbiorów, co pozwala na dynamiczne dodawanie i pozyskiwanie danych z lokalizacji przechowywania.
Biorąc to pod uwagę, aby zrozumieć koncepcję stojącą za parametrem $unwind, musisz najpierw zrozumieć, co mówi przypadek użycia, który próbujesz zacytować. Przykładowy dokument z mongodb.org wygląda następująco:
{
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 }
}
Zwróć uwagę, że tagi są w rzeczywistości tablicą 3 elementów, w tym przypadku „zabawnych”, „dobrych” i „zabawnych”.
$unwind pozwala ci oderwać dokument dla każdego elementu i zwrócić ten wynikowy dokument. Aby myśleć o tym w klasycznym podejściu, byłoby to równoważne „dla każdego elementu w tablicy tags, zwróć dokument zawierający tylko ten przedmiot”.
W ten sposób wynik wykonania następujących czynności:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
zwróci następujące dokumenty:
{
"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
}
Zauważ, że jedyną zmianą w tablicy wyników jest to, co jest zwracane w wartości tagów. Jeśli potrzebujesz dodatkowych informacji na temat tego, jak to działa, zamieściłem link tutaj. Mam nadzieję, że to pomoże i powodzenia w podróży do jednego z najlepszych systemów NoSQL, z jakimi do tej pory się spotkałem.