mongodb的$facet返回完整排序的文档,而不是基于匹配的计数
我有一个文件如下mongodb的$facet返回完整排序的文档,而不是基于匹配的计数,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一个文件如下 { _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", c
{
_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"}
]
}
})
让我知道我做错了什么。提前感谢您的帮助,因此您不需要使用
$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
将计算通过每个集合中的分组阶段添加的相应项目数,最后,$project
再次用于使结果看起来像我们所需要的