Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Mongodb 使用$in查询包含数组的字段时用于排序的索引_Mongodb_Mongodb Query_Mongodb Indexes - Fatal编程技术网

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它就像一个符咒。你愿意写一个答案让我接受吗?这是一个很常见的答案,我会让别人接受:)