Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何将所有子文档收集到单个数组中_Mongodb_Mongoose - Fatal编程技术网

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,但现在它仍然有效。啊,你完全正确。我实际上在我自己的代码中有这个,我已经有一段时间没有使用它了。很高兴知道它有效!我编辑了我的答案并包含了你的信息。