首先,欢迎来到 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 系统之一时好运。