如何在mongodb聚合中按顺序获取计数?
Posted
技术标签:
【中文标题】如何在mongodb聚合中按顺序获取计数?【英文标题】:How to get count by order in mongodb aggregate? 【发布时间】:2020-12-04 01:26:02 【问题描述】:我有两个集合名称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"
我需要这张唱片。
"_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聚合中按顺序获取计数?的主要内容,如果未能解决你的问题,请参考以下文章