Mongodb 使用$in查询包含数组的字段时用于排序的索引
我正在使用运算符中的Mongodb 使用$in查询包含数组的字段时用于排序的索引,mongodb,mongodb-query,mongodb-indexes,Mongodb,Mongodb Query,Mongodb Indexes,我正在使用运算符中的$查询数组,并且我也在尝试对结果进行排序,但我一直遇到以下错误: 对于没有索引的sort(),数据太多。添加索引或指定 较小限制 我知道排序限制为32兆字节,或者必须使用索引。问题是我在查询的字段和排序的字段上有一个复合索引 收藏: { "a" : [ 1, 5, 7, 10 ], ... // other fields are not relevant for querying } 查询如下所示: db.mycol.find({ a: { $in : [
$查询数组,并且我也在尝试对结果进行排序,但我一直遇到以下错误:
对于没有索引的sort(),数据太多。添加索引或指定
较小限制
我知道排序限制为32兆字节,或者必须使用索引。问题是我在查询的字段和排序的字段上有一个复合索引
收藏:
{
"a" : [ 1, 5, 7, 10 ],
... // other fields are not relevant for querying
}
查询如下所示:
db.mycol.find({ a: { $in : [ 1, 10, 19, 100, 2000 ] }}).sort({b : 1});
查询中的$包含大约2000个要匹配的ID
索引是
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1
},
"ns" : "db.mycol",
"name" : "a_1_b_1",
"background" : true
},
如果我在执行查询时使用explain()
,而不使用sort()
我可以看到MongoDB正在使用该索引执行查询,但它显然无法使用该索引执行排序。我还尝试使用跳过
和限制
,但如果我使用跳过
,则会出现同样的错误,可能是因为索引不用于排序
如果我只在字段b
MongoDB上创建索引,MongoDB会很乐意为我排序数据。但我真正想要的是对索引数组字段执行搜索并对数据进行排序
我看了文档,但找不到任何有用的东西。我在MongoDB中遇到错误了吗?还是我做错了什么?原因在于复合索引是如何形成的,这会有所帮助:@Sammaye这很有帮助,谢谢。基本上,范围查询的字段必须是索引中的最后一个字段。基本上,这样就可以在它们所处的位置拾取它们are@Sammaye它就像一个符咒。你愿意写一个答案让我接受吗?这是一个很常见的答案,我会让别人接受:)