1

我正在使用运算符查询数组$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 正在使用该索引来执行查询,但它显然不能使用相同的索引来执行排序。我也尝试使用 a skipand limit,但如果我使用 askip太大,我会得到同样的错误,可能是因为 index 不用于排序。

如果我只在字段上创建索引,bMongoDB 会很乐意为我对数据进行排序。但我真正想要的是对索引数组字段执行搜索并对数据进行排序。

我查看了文档,但找不到任何有用的东西。我是在 MongoDB 中遇到错误还是我做错了什么?

4

0 回答 0