如何使用 mongodb 获取对象内部的计数对象

How to take the count object inside object using mongodb

/* 1 */
{
    "_id" : "123",
    "gallary" : {
        "profilepic" : [
            "200"
        ]
    }
},

我的要求是假设 gallary.profilepic 是对象 {}

Expected output:

count : 3

注意:_id 456 profilepic 是一个对象所以我们必须计数 (2) & 789 profilepic 是一个对象所以我们必须计数 (1) 所以输出应该是 2 + 1 = 3

试试这个聚合

  • $type识别对象类型并进行过滤
  • $objectToArray将对象转为数组得到大小

流水线

 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 中,您可以在 $match 阶段

中使用 $expr 删除 $addFields$match 阶段