C# 在MongoDB中,如何在对象数组中按分数进行搜索、评分和排序?
假设有以下类型的MongoDB文档 “标签”C# 在MongoDB中,如何在对象数组中按分数进行搜索、评分和排序?,c#,mongodb,mongodb-query,C#,Mongodb,Mongodb Query,假设有以下类型的MongoDB文档 “标签” [ { _id:1, name:[ 'C#', 'C#.NET', 'csharp' ] }, _id:2, name:[ '.NET', '.NET Framework', 'dotnet framework' ] }, _id:3, name:[ 'javascript', 'js' ] } ] “职位” [ { _id: 1, contributer: { first: 'XXX', last: '-' }, tags: [ {
[
{
_id:1,
name:[ 'C#', 'C#.NET', 'csharp' ]
},
_id:2,
name:[ '.NET', '.NET Framework', 'dotnet framework' ]
},
_id:3,
name:[ 'javascript', 'js' ]
}
]
“职位”
[
{
_id: 1,
contributer: { first: 'XXX', last: '-' },
tags: [ { name: 'C#', tag_id: '1' }, { name: '.NET Framework', tag_id: '2' } ]
},
{
_id: 2,
contributer: { first: 'YYY', last: '-' },
tags: [ { name: 'javascript', tag_id: '3' } ]
},
{
_id: 3,
contributer: { first: 'XXX', last: '-' },
tags: [ { name: '.NET Framework', tag_id: '2' } ]
}]
我想搜索多个标签,如
{
_ids: [1 ,2 ]
}
在post文档中,它拥有超过100万个文档(并且还在增长),并按与IRELIVANT相关的顺序排列结果
我正在寻找高级解决方案,通过使用现有的解决方案和其他解决方案(如map reduce)以及最佳搜索查询来更好地替换文档结构,从而获得最快的结果
预期结果将是:
“结果”
[
{
_id: 1,
contributer: { first: 'XXX', last: '-' },
tags: [ { name: 'C#', tag_id: '1' }, { name: '.NET Framework', tag_id: '2' } ]
},
{
_id: 3,
contributer: { first: 'XXX', last: '-' },
tags: [ { name: '.NET Framework', tag_id: '2' } ]
}]
到目前为止,我已经尝试了以下代码段(多个$elemmatch)
但不确定这是否是唯一和最好的解决方案。您可以包括MongoDB或C#驱动程序代码。谢谢你的建议 这里的关键是索引,我建议您花些时间根据搜索内容定义索引。我建议使用explain()方法来查看查询执行计划,看看您可以改进什么。如果你的查询在收集扫描时100%通过,那么它的速度将会非常慢
不确定您是否已经完成了,但不能高度推荐MongoDB university()上为.NET开发人员提供的免费课程。您好,我已经编辑了问题并添加了代码段。谢谢。你好,安德烈,谢谢你的回答。tag_id上有一个已定义的单索引。我上过M101N课程,而MongoDB有2.4版本,我有证书。在tags数组上添加一个新索引可能会有用,以便查询可以使用索引扫描
db.posts.find(
{
tags: {
$elemMatch: {
tag_id: "1", "2",
},
$elemMatch: {
tag_id: "1",
},
}
}
)