qq_17591503 2020-12-15 20:55 采纳率: 0%
浏览 888
已结题

MongoDB聚合查询为数组中每个对象的某字段加1

test集合中原数据如下

{
    "_id": "5fab380169f634648ca0097e",
    "Parents": [
        {
            "_id": "5fab37cf69f634648ca0097d",
            "Category": NumberInt("2")
        },
        {
            "_id": "5f8eae8192beba49a8220b8e",
            "Category": NumberInt("1")
        },
        {
            "_id": "5f8158ebe26d163294b4efd9",
            "Category": NumberInt("0")
        }
    ]
}

我想用聚合查询查出原数据并将Parents数组中每个对象的Category字段加1,用如下方法,报错“$add only supports numeric or date types, not array”,$Parents.Category的表达不对,应该怎么写,求助大神

db.test.aggregate([
    {
        "$project": {
            "_id":1,
            "Parents._id": 1,
            "Parents.Category": {
                "$add": ["$Parents.Category", 1]
            }

        }
    }
])
  • 写回答

1条回答 默认 最新

  • 晨曦之光Wing 2020-12-16 19:03
    关注
    1. 翻一下“$add only supports numeric or date types, not array”:$add仅支持数字或日期类型,不支持数组类型。Parents字段是数组,它不支持。
    2. 解决:可以使用$unwind对Parents字段解组,然后再使用$add,如下所示
      db.t1.aggregate([
      	{
      		"$unwind":"$Parents"
      	},
          {
              "$project": {
                  "_id":1,
                  "Parents._id": 1,
                  "Parents.Category": {
                      "$add": ["$Parents.Category", 1]
                  }
      
              }
          }
      ])

    评论

报告相同问题?