Mongodb + C#:如何查询子文档并按其最常用的顺序
Posted
技术标签:
【中文标题】Mongodb + C#:如何查询子文档并按其最常用的顺序【英文标题】:Mongodb + C#: how to query sub-document and order by its used most 【发布时间】:2021-10-12 21:45:31 【问题描述】:我有这样的集合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
出现 2 次p>
最后是Tag2
请帮我这样查询。
提前致谢。
【问题讨论】:
【参考方案1】:如果你只想要按计数排序的标签,你可以试试这个。
db.collection.aggregate([
"$unwind": "$tags"
,
"$group":
"_id": "$tags",
"count":
"$sum": 1
,
"$sort":
"count": -1
,
"$group":
"_id": null,
"tags":
"$push": "$_id"
,
"$unset": "_id"
])
这使它成为一个排序标签的数组。重要的部分是直到$sort
。
你可以试试代码here also
【讨论】:
谢谢@Takis。如我所愿,顺便学习新语法$unset
。再次感谢。
你能为$unset写mongodb驱动C#吗? @塔基斯?
对不起,我不知道如何使用 C# 驱动程序查询生成器,但您可以使用 "$project" : "_id" : 0
来做同样的事情
是的,我设法使用了 $projection 并处理了一些东西,但我喜欢使用 $unset 的方式。还是谢谢。以上是关于Mongodb + C#:如何查询子文档并按其最常用的顺序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用spring MongoTemplate查询子文档,并按子文档的某个字段排序?
如何使用 C# 驱动程序更新 MongoDB 数组中的子文档
如何在 mongoose/mongodb 查询子文档中使用 mapreduce?