MongoDB: Сводка на основе критериев второго уровня - PullRequest
0 голосов
/ 13 января 2019

У меня есть следующий документ:

{"_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" tanaman. Например, я хотел бы суммировать "jumlah" с условиями: provinsi = "JB" и tanaman.id = "lto".

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Вы можете использовать $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"
      }
    }
  }
])
0 голосов
/ 13 января 2019
db.collection.aggregate([
    {$match: {"provinsi": "JB"} }, 
    {$unwind: '$tanaman'}, 
    {$match: {"tanaman.id" : "lto"} },
    {$group: {
        _id: null, 
        "suma": {$sum: "$tanaman.jumlah" }
    }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...