为什么子文档查询的顺序会影响MongoDB中的结果?

时间:2016-01-22 02:38:55

标签: mongodb

我正在查询一个集合:

> db.things.find({ "entity":{entityType:"Location", id: "26802"}})

返回0结果,但如果我查询entityTypeid切换:

> db.things.find({ "entity":{id: "26802", entityType:"Location"}})

返回3个结果。

还为以下两者返回了3个结果:

> db.things.find({ "entity.id": "26802", "entity.entityType":"Location"})
> db.things.find({ "entity.entityType":"Location", "entity.id": "26802"})

为什么会这样?

entity

上有一个索引
{
    "v" : 1,
    "key" : {
        "entity" : 1
    },
    "name" : "entity_1",
    "ns" : "db_name.things"
}

1 个答案:

答案 0 :(得分:3)

请参阅此link

此查询entity字段必须与嵌入文档完全匹配。

> db.things.find({ "entity":{entityType:"Location", id: "26802"}})

匹配

entity: {
    entityType:"Location", 
    id: "26802"
}

而不是这个对象

entity: {
    id: "26802"
    entityType:"Location", 
}

但是,下面的这两个查询可以匹配上述两个对象,因为此查询与entity字段包含嵌入文档的文档匹配,其中字段id的值为"26802"以及值entityType的字段"Location"

> db.things.find({ "entity.id": "26802", "entity.entityType":"Location"})
> db.things.find({ "entity.entityType":"Location", "entity.id": "26802"})