Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MongoDB中,如何在对象数组中按分数进行搜索、评分和排序?_C#_Mongodb_Mongodb Query - Fatal编程技术网

C# 在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: [ {

假设有以下类型的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: [ { 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",
                },
      }
   }
)