如何在mongodb聚合中按订单计数?

问题描述

我有两个集合,分别为<script src="https://kit.fontawesome.com/d32f88a9a9.js" crossorigin="anonymous"> </script> <div class="link-div" style="font-size: 32px;"> <a href="link-to-where-we're-going"><i class="fab fa-twitch fa-fw"></i></a> <a href="link-to-where-we're-going" target="_blank"><i class="fab fa-facebook-square fa-fw"></i></a> </div>listings

moods示例:

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"
}

我需要这种类型的记录。我不知道聚合。

解决方法

您可以使用aggregate()

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

$size

,

完成此工作:db.collection.aggrate()。count() 尝试组合功能,可能会起作用。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...