我有以下文件:
{"_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”。
答案 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
db.collection.aggregate([
{
$match: {
"provinsi": "JB"
}
},
{
$addFields: {
tanaman: {
$filter: {
input: "$tanaman",
as: "t",
cond: {
$eq: [
"lto",
"$$t.id"
]
}
}
}
}
},
{
$addFields: {
sum: {
$sum: "$tanaman.jumlah"
}
}
}
])