Mongodb подсчитать сумму полей в коллекции с условиями - PullRequest
0 голосов
/ 23 января 2020

У меня есть коллекции в 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: ""
           }
      ]
  }    
}

Я хочу получить сумму числа subFieldB, где fieldA равно "123", поэтому цель - получить что-то вроде {sumOfSubFieldB: 6}

Я пробовал агрегировать как:

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

Пока я получаю сумму fieldB за каждый c как:

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

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

Как мне это сделать запрос, чтобы получить общее количество fieldB? Спасибо

1 Ответ

1 голос
/ 23 января 2020

Попробуйте это или что-то похожее с $ group:

db.collection.aggregate(
    [{
        $match: {
            "fieldA": "123"
        }
    }, {
        $group: {
            _id: "$fieldA",
            count: { 
                $sum: { $size: "$fieldB.subFieldB" } }
        }
    }]
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...