如何在mongodb聚合中按顺序获取计数?

Posted

技术标签:

【中文标题】如何在mongodb聚合中按顺序获取计数?【英文标题】:How to get count by order in mongodb aggregate? 【发布时间】:2020-12-04 01:26:02 【问题描述】:

我有两个集合名称listingsmoods

listings 样本:


    "_id": ObjectId("5349b4ddd2781d08c09890f3"),
    "name": "Hotel Radisson Blu",
    "moods": [
      ObjectId("507f1f77bcf86cd799439010"),
      ObjectId("507f1f77bcf86cd799439011")
    ]

moods 示例:


    "_id": ObjectId("507f1f77bcf86cd799439011"),
    "name": "Sports"
,

    "_id": ObjectId("507f1f77bcf86cd799439010"),
    "name": "Spanish Food"
,

    "_id": ObjectId("507f1f77bcf86cd799439009"),
    "name": "Action"

我需要这张唱片。


    "_id": ObjectId("507f1f77bcf86cd799439011"),
    "name": "Sports",
    "count": 1
,

    "_id": ObjectId("507f1f77bcf86cd799439010"),
    "name": "Spanish Food",
    "count": 1
,

    "_id": ObjectId("507f1f77bcf86cd799439009"),
    "name": "Action",
    "count": 0

我需要这种类型的记录。我对聚合一无所知。

【问题讨论】:

【参考方案1】:

您可以使用aggregate(),

$lookup加入收藏listings $match 管道检查moods _id 在listings 字段moods 数组中
db.moods.aggregate([
  
    "$lookup": 
      "from": "listings",
      "as": "count",
      let:  id: "$_id" ,
      pipeline: [
        
          "$match": 
            "$expr":  "$in": ["$$id", "$moods"] 
          
        
      ]
    
  ,
$addFields 添加count 在我们从上面查找得到的数组count 的$size 的基础上
  
    $addFields: 
      count:  $size: "$count" 
    
  
])

Playground

【讨论】:

【参考方案2】:

这项工作:

db.collection.aggrate().count() 

尝试组合功能,可能会奏效。

【讨论】:

有什么想法吗?如何使用我的收藏? moods 是您收藏的名称,因此您可以尝试 db.moods.aggragate().count() 根据要求提供参数。

以上是关于如何在mongodb聚合中按顺序获取计数?的主要内容,如果未能解决你的问题,请参考以下文章

在 MongoDB 中按年和月聚合查询

使用多个字段在 MongoDB 聚合框架中按相关性排序

使用多个字段在 MongoDB 聚合框架中按相关性排序

在雪花中按日期聚合数据组

如何在 mongodb 中聚合子集合并应用 $count 不起作用

MongoDB 从其他集合中获取数组中最常用的类别以及计数