我有一个像这样的集合Sites
{
_id: ObjectId("5ed4d2ed8a98dd17c467c040"),
name:"Name1",
description:"Desc1",
tags:[
"Tag1",
"Tag3"
]
},
{
_id: ObjectId("5ed4d2ed8a98dd17c467c040"),
name:"Name2",
description:"Desc2",
tags:[
"Tag1",
"Tag3"
]
},
{
_id: ObjectId("5ed4d2ed8a98dd17c467c040"),
name:"Name3",
description:"Desc3",
tags:[
"Tag1",
"Tag4"
]
},
{
_id: ObjectId("5ed4d2ed8a98dd17c467c040"),
name:"Name4",
description:"Desc4",
tags:[
"Tag3",
"Tag4"
]
},
{
_id: ObjectId("5ed4d2ed8a98dd17c467c040"),
name:"Name5",
description:"Desc6",
tags:[
"Tag1",
"Tag2"
]
}
]
我想通过一个最常用的标签来查询所有有顺序的标签。
在这个例子中,查询应该是返回
"Tag1", "Tag3", "Tag4", "Tag2"
因为Tag1
出现次数最多4次
Tag3
出现3次
Tag4
出现两次
And finalTag2
请帮我做这样的查询。
提前感谢。
如果您只想按计数对标签进行排序,您可以尝试这样做。
db.collection.aggregate([
{
"$unwind": "$tags"
},
{
"$group": {
"_id": "$tags",
"count": {
"$sum": 1
}
}
},
{
"$sort": {
"count": -1
}
},
{
"$group": {
"_id": null,
"tags": {
"$push": "$_id"
}
}
},
{
"$unset": "_id"
}
])
这使它成为一个排序标记数组。重要的部分是直到$sort
.
你也可以试试这里的代码