mongodb访问子文档

时间:2016-06-30 17:21:42

标签: mongodb mongodb-query

我有一个集合(用户),看起来与下面提到的非常相似。

db.users.find().pretty();
{
        "_id" : ObjectId("5773fc2826e0b6cf532569ca"),
        "user" : {
                "login" : "tester"
        }
}
{
        "_id" : ObjectId("5773fd6426e0b6cf532569cb"),
        "user" : {
                "login" : "tester",
                "name" : "anil"
        }
}

当我这样做时

> db.users.find({"user":{"login":"tester"}});

我得到了这个结果

{ "_id" : ObjectId("5773fc2826e0b6cf532569ca"), "user" : { "login" : "tester" } }

但是当我在下面做的时候,我没有记录。

db.users.find({"user":{"name":"anil"}});

> 所以我的问题是为什么第二个查询没有返回任何响应?

另外,基于上面的例子,我甚至怀疑这是否是访问子文档的正确方法?

不应通过.notation访问子文档。像下面的东西? (在这种情况下,我在两种情况下都得到了正确的输出)

db.users.find({"user.login":"tester"});
{ "_id" : ObjectId("5773fc2826e0b6cf532569ca"), "user" : { "login" : "tester" } }
{ "_id" : ObjectId("5773fd6426e0b6cf532569cb"), "user" : { "login" : "tester", "name" : "anil" } }

> db.users.find({"user.name":"anil"});
{ "_id" : ObjectId("5773fd6426e0b6cf532569cb"), "user" : { "login" : "tester", "name" : "anil" } }
>

1 个答案:

答案 0 :(得分:3)

  

另外,基于上面的例子,我甚至怀疑这是不是   访问子文档的正确方法?

实际上并非这样。第一个查询user表示您正在寻找完全等于{"login":"tester"}对象的login,而不是tester字段等于{{{}的用户1}}。有一个文档与该条件匹配,该文档实际上作为查询结果返回。

同样,第二个查询db.users.find({"user":{"name":"anil"}});表示您正在寻找完全等于user对象的{"name":"anil"}。没有这样的user。有一个文档部分与您的查询匹配,但这还不够。

如果您正在寻找user name等于anil的{​​{1}},请使用 Dot Notation 来访问子文档,就像您一样在你的第二组查询中做了。

  

不应该通过.notation访问子文档。就像是   在下面? (在这种情况下,我在两种情况下都得到了正确的输出)

是。这是正确的方法。