mongodb - mongodb 的 $facet 返回完整排序的文档而不是基于匹配的计数
问题描述
我有如下文件
{
_id:1234,
userId:90oi,
tag:"self"
},
{
_id:5678,
userId:65yd,
tag:"other"
},
{
_id:9012,
userId:78hy,
tag:"something"
},
{
_id:3456,
userId:60oy,
tag:"self"
},
我需要像下面这样的回应
[{
tag : "self",
count : 2
},
{
tag : "something",
count : 1
},
{
tag : "other",
count : 1
}
]
我正在使用 $facet 来查询文档。但它返回的是整个文件而不是计数。我的查询如下
db.data.aggregate({
$facet: {
categorizedByGrade : [
{ $match: {userId:ObjectId(userId)}},
{$sortByCount: "$tag"}
]
}
})
让我知道我做错了什么。在此先感谢您的帮助
解决方案
因此,当您确实需要在一个聚合查询( mongoDB $facet$facet
)中处理多个聚合管道时,您不需要使用这一方面,请尝试以下操作:
db.yourCollectionName.aggregate([{$project :{tag :1, _id :0}},{$group :{_id: '$tag',
count: { $sum: 1 }}}, {$project : {tag : '$_id', _id:0, count :1}}])
解释 :
$project
首先是在所有文档中只保留需要的字段,$group
这样我们要处理的数据更少$sum
set, finally$project
再次用于使结果看起来像我们需要的那样。
推荐阅读
- spring - AWS ECS - 无效或损坏的 Jar 文件
- blazor - Blazor 数据绑定动态生成的元素
- gradle - Gradle:如果至少执行了一个子项目的任务,则运行任务
- javascript - Getting TypeError Arg 1 when calling save method of jsPDF
- python - 无法将 CSS 应用于 GtkEntry 小部件(GTK3 / gi / Python)不工作
- r - 如果不符合某些条件,则将多维数组中的所有值设置为 0
- python - 最后一个子进程调用在 FFMPEG 的串联代码中不起作用。我应该如何解决这个问题?
- django - 如何在 Django Admin 中对外部字段启用列排序
- java - 带有按钮的 Swing JPanel 无法重绘
- python - sys.exc_info() 的目的是什么?