首先,欢迎来到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个元素组成的数组,在这种情况下为“ fun”,“ good”和“ fun”。
$ 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系统之一好运。