Mongodb 如何将所有子文档收集到单个数组中
如何将集合的所有子文档收集到单个数组中?假设我的收藏中有这些文档:Mongodb 如何将所有子文档收集到单个数组中,mongodb,mongoose,Mongodb,Mongoose,如何将集合的所有子文档收集到单个数组中?假设我的收藏中有这些文档: /* 0 */ { "_id" : ObjectId("52d709d8cdcc16fa35834320"), "start_date" : ISODate("2012-10-31T00:00:00.000Z"), "end_date" : ISODate("2012-11-13T00:00:00.000Z"), "items" : [ { "upc" :
/* 0 */
{
"_id" : ObjectId("52d709d8cdcc16fa35834320"),
"start_date" : ISODate("2012-10-31T00:00:00.000Z"),
"end_date" : ISODate("2012-11-13T00:00:00.000Z"),
"items" : [
{
"upc" : "",
}
],
}
/* 1 */
{
"_id" : ObjectId("52d709d8cdcc16fa35834321"),
"modified_at" : ISODate("2014-01-15T22:16:06.991Z"),
"start_date" : ISODate("2012-10-31T00:00:00.000Z"),
"end_date" : ISODate("2012-11-13T00:00:00.000Z"),
"items" : [
{
"upc" : "",
}
],
}
/* 2 */
{
"_id" : ObjectId("654321973387fa1fa7777777"),
"start_date" : ISODate("2012-10-31T00:00:00.000Z"),
"end_date" : ISODate("2012-11-13T00:00:00.000Z"),
"items" : [
{
"upc" : "",
},
{
"upc" : "",
}
],
}
我不需要做任何幻想,比如求和或计算任何东西。我只想提取子文档并以以下内容结束:
[
{ "upc" : "123" },
{ "upc" : "456" },
{ "upc" : "789" },
{ "upc" : "012" }
]
我知道必须有一个简单的方法来实现这一点,但我没有任何运气。我也做过类似的事情,可以通过聚合框架()实现。您可以尝试这样的查询(免责声明:未经测试我通常使用C#构建查询) 如果语法正确,查询应该命中每个文档,并展开每个文档的“items”数组中的所有元素。然后,它在一个单独的文档中使用“$group”和“$push”将其分组(这里解释了操作符)。这应产生如下结构:
{
items:[
{ "upc" : "123" },
{ "upc" : "456" },
{ "upc" : "789" },
{ "upc" : "012" }"
]
}
如果它产生更多,则应在管道末端添加$project步骤(
您可以进一步优化它,方法是添加$match步骤以在展开之前过滤文档,甚至过滤数组中的结果($match->$unwind->$match->$group)。()
希望这对GL有帮助!我也做过类似的事情,可以通过聚合框架()实现。您可以尝试这样的查询(免责声明:未测试我通常使用C#构建查询) 如果语法正确,则查询应命中每个文档并展开每个文档的“items”数组中的所有元素。然后,它将这些元素组合到一个带有“$group”和“$push”的文档中(此处解释了运算符)。这应产生如下结构:
{
items:[
{ "upc" : "123" },
{ "upc" : "456" },
{ "upc" : "789" },
{ "upc" : "012" }"
]
}
如果它产生更多,则应在管道末端添加$project步骤(
您可以进一步优化它,方法是添加$match步骤以在展开之前过滤文档,甚至过滤数组中的结果($match->$unwind->$match->$group)。()
希望这有帮助,GL!您在group语句中漏掉了一个id:{$group:{{U id:null,items:{$push:“$items”}}但除此之外它是有效的。似乎你必须使用null作为_id,但现在它仍然有效。啊,你完全正确。我实际上在我自己的代码中有这一点,我已经有一段时间没有使用它了。很高兴知道它是有效的!我编辑了我的答案并包含了你的信息。你在组语句中漏掉了一个id:{$group:{{u-id:null,items:{$push:$items”}}}但在其他方面它是有效的。似乎你必须使用null作为{u-id,但现在它仍然有效。啊,你完全正确。我实际上在我自己的代码中有这个,我已经有一段时间没有使用它了。很高兴知道它有效!我编辑了我的答案并包含了你的信息。