【问题标题】:Mongodb count sum of fields in a collection with conditionsMongodb计算有条件的集合中的字段总和
【发布时间】:2020-05-09 08:58:44
【问题描述】:

我在 mongoDb 中有这样的集合:

{
  _id: ObjectId(""),
  fieldA: "123",
  fieldB: {
      subFieldB:[
           {
             fieldC: ""
           },
           {
             fieldC: ""
           },
           {
             fieldC: ""
           }
      ]
  }    
},
{
  _id: ObjectId(""),
  fieldA: "123",
  fieldB: {
      subFieldB:[
           {
             fieldC: ""
           },
           {
             fieldC: ""
           },
           {
             fieldC: ""
           }
      ]
  }    
},
{
  _id: ObjectId(""),
  fieldA: "456",
  fieldB: {
      subFieldB:[
           {
             fieldC: ""
           },
           {
             fieldC: ""
           },
           {
             fieldC: ""
           }
      ]
  }    
}

我想得到 fieldA 为“123”的 subFieldB 的总数 所以目标是得到类似 {sumOfSubFieldB: 6}

我尝试过像这样的聚合:

db.collection.aggregate([
    {
        $match : { "fieldA" : "123" }
    },
   {
      $project: {
         numberOfFieldB: { $cond: { if: { $isArray: "$fieldB.subFieldB" }, then: { $size: "$fieldB.subFieldB" }, else: "NA"} },
      }
   }
] )

到目前为止,我得到每个文档的 fieldB 总和,例如:

{
    "_id" : ObjectId(""),
    "numberOfFieldB" : 3
}

{
    "_id" : ObjectId(""),
    "numberOfFieldB" : 3
}

如何查询fieldB的总数? 谢谢

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    试试这个,或者使用 $group 类似的东西:

    db.collection.aggregate(
        [{
            $match: {
                "fieldA": "123"
            }
        }, {
            $group: {
                _id: "$fieldA",
                count: { 
                    $sum: { $size: "$fieldB.subFieldB" } }
            }
        }]
    );
    

    【讨论】:

    • 更改$group的_id,需要按正确的_id分组,用$fieldB试试
    • 抱歉,我再次尝试使用 fieldA 作为 _id 并得到:{ "_id" : , "total" : 0 }
    • 所以试试_id: "$fieldB"
    • 现在看,我的第一种方法是正确的,但我试图得到 sum 而不是 count。所以现在就好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多