【问题标题】:mongodb accessing subdocumentsmongodb 访问子文档
【发布时间】:2016-11-02 22:25:46
【问题描述】:

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

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" } }
>

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

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

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

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

    如果您正在寻找 name 等于 aniluser,请使用 Dot Notation 访问子文档,就像您在第二组查询中所做的那样。

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

    是的。这是正确的方法。

    【讨论】:

      猜你喜欢
      • 2013-11-08
      • 1970-01-01
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2014-09-28
      • 1970-01-01
      • 2019-03-10
      相关资源
      最近更新 更多