首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB添加带有变量值的新字段

MongoDB添加带有变量值的新字段
EN

Stack Overflow用户
提问于 2021-03-29 19:32:28
回答 1查看 247关注 0票数 2

我的问题是,考虑到这样的文件很少

代码语言:javascript
复制
{
  deliveryDay: "2021-01-14",
  plate: {
    name: "pasta",
    quantity: 1
  }
}

{
  deliveryDay: "2021-01-16",
  plate: {
    name: "pasta",
    quantity: 3
  }
}

{
  deliveryDay: "2021-01-16",
  plate: {
    name: "pizza",
    quantity: 2
  }
}

有办法得到下面的通缉结果吗?我试图使用像这个$addFields这样的{"$deliveryDay": "$plate.quantity" }来定制一个名为字段的字段,但是给出了一个无效的错误。聚合不是一个问题,我在aggregation-framework中,所以我需要使用聚合管道阶段来完成它。

出席会议的结果:

代码语言:javascript
复制
{
  "2021-01-14": 1,
  "2021-01-16": 3,
  plate: {
    name: "pasta"
  }
}

{
  "2021-01-14": 0,
  "2021-01-16": 2,
  plate: {
    name: "pizza"
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-29 20:28:28

所以我的想法是:

  1. 将文档按deliveryDayplate.name分组,以得到plate.quantity之和。
  2. name再次将上述结果分组以生成[{ k: "", v: "" }]格式的数组。
  3. { k: "plate", v: { name: "$_id" } }连接到上面的数组中。
  4. 现在使用array$arrayToObject转换为对象。

蒙古游乐场的解决方案。试试这个:

代码语言:javascript
复制
db.testCollection.aggregate([
    {
        $group: {
            _id: {
                dDate: "$deliveryDay",
                name: "$plate.name"
            },
            sumOfQty: { $sum: "$plate.quantity" }
        }
    },
    {
        $group: {
            _id: "$_id.name",
            array: {
                $push: {
                    k: "$_id.dDate",
                    v: "$sumOfQty"
                }
            }
        }
    },
    {
        $addFields: {
            array: {
                $concatArrays: ["$array", [{ k: "plate", v: { name: "$_id" } }]]
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: { $arrayToObject: "$array" }
        }
    }
]);

输出

代码语言:javascript
复制
/* 1 */
{
    "2021-01-16" : 2,
    "plate" : {
        "name" : "pizza"
    }
},

/* 2 */
{
    "2021-01-14" : 1,
    "2021-01-16" : 3,
    "plate" : {
        "name" : "pasta"
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66860506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档