我正在使用$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});
$in
查询包含约。要匹配的2000个ID。
索引是
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1
},
"ns" : "db.mycol",
"name" : "a_1_b_1",
"background" : true
},
如果我在没有explain()
的情况下进行查询时使用sort()
,我可以看到MongoDB正在使用该索引来执行查询,但显然不能使用相同的索引来执行排序。我还尝试使用skip
和limit
,但如果我使用的skip
太大,我会得到相同的错误,可能是因为索引不用于排序。
如果我只在字段b
上创建索引,MongoDB会很乐意为我排序数据。但我真正想要的是对索引数组字段执行搜索并对数据进行排序。
我查看了文档,但找不到任何有用的信息。我是否在MongoDB中遇到过错误或者我做错了什么?