如何查找数组中对象的数量,该对象是集合中所有mongodb文档中键的值

时间:2018-11-28 08:03:54

标签: node.js mongodb mongoose

这是集合。

{{
 "id" : "123",
 "likes" : [ {
       "member" : "3041" 
      },
      {
       "member" : "3141" 
     }]
},
{
 "id" : "124",
 "likes" : [ {
       "member" : "3241" 
      },
      {
       "member" : "3241" 
      },
      {
       "member" : "3341" 
     }]
}}

如何检索每个文档的“喜欢”键的对象数?

以这种格式:

[{
   "id" : "123",
   "likesCount" : 2
},
{
   "id" : "124",
   "likesCount" : 3
}]

2 个答案:

答案 0 :(得分:1)

这应该为您做到:

db.collection.aggregate([
  {
    $project: {
      _id: 0,
      id: 1,
      likesCount: {
        $size: "$likes"
      }
    }
  }
])

您使用的是聚合,在其$ project部分中,使用$size来获取数组的长度。

您可以看到它在here上运行

答案 1 :(得分:0)

我认为您必须映射集合以将其中的对象转换为所需的形状。

在这种情况下,我们获取对象并提取ID,而不仅仅是获取所有喜欢的对象的长度。

let newCollection = collection.map(obj => ({
  id: obj.id,
  likesCount: obj.likes.length
}));