MongoDB:如何在$或者

时间:2017-08-04 19:39:49

标签: mongodb performance indexing

我在MongoDB中的文档如下所示:

{
    "_id" : ObjectId("59839527ceaa98f14349233a"),
    "entityId" : "10",
    "a" : 1,
    "b" : 1,
    "c" : 1,
    "d" : 1
}

我的基本查询如下所示:

db.getCollection('test').find(
{

    "entityId" : {$in : ["10", "11"]},
    $or : [
        {"a" : {$gt : 2}},
        {"a" : 2, "_id" : {$gt : ObjectId("59839527ceaa98f14349233a")}}
    ]

}).sort({"a" : 1})

注意:在我的其他查询中,只会在 $或sort内进行更改。例如,以下是我的查询的另一个示例(仅a更改为b):

db.getCollection('test').find(
{

    "entityId" : {$in : ["10", "11"]},
    $or : [
        {"b" : {$gt : 2}},
        {"b" : 2, "_id" : {$gt : ObjectId("59839527ceaa98f14349233a")}}
    ]

}).sort({"b" : 1})

目前我正在创建复合索引,如下所示:

db.getCollection('test').createIndex({"entityId" : 1, "a" : 1, "_id" : 1})
db.getCollection('test').createIndex({"entityId" : 1, "b" : 1, "_id" : 1})

当我运行第一个explain()查询时,第一个索引被选中就好了,但是当我运行第二个查询时,我注意到第一个索引再次被选中,第二个索引被{{{ 1}}。我究竟做错了什么?还有其他更好的指数吗

0 个答案:

没有答案