Как взять подсчет объекта внутри объекта, используя mongodb - PullRequest
0 голосов
/ 11 января 2019
/* 1 */
{
    "_id" : "123",
    "gallary" : {
        "profilepic" : [
            "200"
        ]
    }
},

Мое требование: gallary.profilepic является объектом {}

Ожидаемый результат:

count : 3

Примечание: _id 456 profilepic для объекта, поэтому мы должны принять count (2) & 789 profilepic - это объект, поэтому мы должны принять count (1), чтобы на выходе было 2 + 1 = 3

1 Ответ

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

попробуйте эту агрегацию

  • $type для определения типа объекта и фильтрации
  • $objectToArray для преобразования объекта в массив для получения размера

1011 * трубопровод *

 db.t51.aggregate([
    {$addFields : {type : {$type : "$gallary.profilepic"}}}, 
    {$match : {type : "object"}}, 
    {$group : {_id : null, count : {$sum : {$size : {$objectToArray : "$gallary.profilepic"}}}}}
 ])

выход

{ "_id" : null, "count" : 3 }

В Mongo 3.6 вы можете удалить $addFields и $match этапов с $expr в $match stage

...