MongoDB:基于第二级标准的摘要

时间:2019-01-13 14:01:00

标签: mongodb aggregation-framework

我有以下文件:

{"_id" : ObjectId("5c3b2010651dc320a4710f4e"), 
"id" : "JB1", 
"nama" : "Kota Bandung", 
"provinsi" : "JB", 
"tanaman" : [
    {
        "id" : "lto", 
        "nama" : "Lettuce Organik", 
        "teknik_tanaman" : "oraganik", 
        "jumlah" : 5000.0
    }, 
    {
        "id" : "ltk", 
        "nama" : "Lettuce Konvensional", 
        "teknik_tanaman" : "konvensional", 
        "jumlah" : 8000.0
    }
]
}
{ 
"_id" : ObjectId("5c3b21fb651dc320a4710f5e"), 
"id" : "JB2", 
"nama" : "Kabupaten Bandung Barat", 
"provinsi" : "JB", 
"tanaman" : [
    {
        "id" : "lto", 
        "nama" : "Lettuce Organik", 
        "teknik_tanaman" : "oraganik", 
        "jumlah" : 7000.0
    }, 
    {
        "id" : "ltk", 
        "nama" : "Lettuce Konvensional", 
        "teknik_tanaman" : "konvensional", 
        "jumlah" : 10000.0
    }
]
}

如何根据塔那曼的“ provinsi”和“ id”中的值求和“ jumlah”。例如,我想对条件“ jumlah”求和:provinsi =“ JB”和tanaman.id =“ lto”。

2 个答案:

答案 0 :(得分:2)

db.collection.aggregate([
    {$match: {"provinsi": "JB"} }, 
    {$unwind: '$tanaman'}, 
    {$match: {"tanaman.id" : "lto"} },
    {$group: {
        _id: null, 
        "suma": {$sum: "$tanaman.jumlah" }
    }}
])

答案 1 :(得分:0)

您可以使用$filter排列子元素和$sum

mongo playground

db.collection.aggregate([
  {
    $match: {
      "provinsi": "JB"
    }
  },
  {
    $addFields: {
      tanaman: {
        $filter: {
          input: "$tanaman",
          as: "t",
          cond: {
            $eq: [
              "lto",
              "$$t.id"
            ]
          }
        }
      }
    }
  },
  {
    $addFields: {
      sum: {
        $sum: "$tanaman.jumlah"
      }
    }
  }
])