查找对象MongoDB没有返回任何值

时间:2016-11-18 10:08:21

标签: mongodb nosql

我有这个数据结构:

{
"_id" : ObjectId("582ecaa97be792282ca31bc4"),
"hero" : {
    "5001" : {
        "id" : 5001
        "name" : "Rogue"
             }
    "5002" : {
        "id" : 5002
        "name" : "Mage"
             }
    "5003" : {
        "id" : 5002
        "name" : "Paladin"
             }
         }
}

我有查询。

db.getCollection('hero').find({"Hero":{"5001":{"id" : 5001}}})

返回0结果。 我可以单独存储Heros,但我想知道如何首先执行此查询。如果我用5001等查询,我想要解决的是5001以下的所有数据。

谢谢!

编辑:我通过使用点符号找到了答案,我已经尝试过点符号,但是在尝试时我觉得它有点不对,我认为它只适用于数组。如果其他人在寻找你会做的事情。

db.Runes.find({ "hero.5001.id": 5001 },{"hero.5001":1})

2 个答案:

答案 0 :(得分:1)

首先,所有字段都区分大小写,因此您无法查询"英雄" " Hero"。

第二,如果您要查询嵌套文档,则应使用"点符号"

https://docs.mongodb.com/manual/core/document/#dot-notation

所以你的文件的正确方法是。

db.getCollection('hero').find({"hero.5001.id" : 5001})

它将返回整个文档。因此,具有5002和5003键的整个英雄对象也将返回,因为它们属于同一文档。您可以使用投影仅投影所需的字段。 可以按以下方式完成

db.getCollection('hero').find({"hero.5001.id": 5001},{"hero.5001" : 1})

以下是有关Mongodb查询和投影运算符的更多信息 https://docs.mongodb.com/v3.2/reference/operator/query/

答案 1 :(得分:0)

试试这个

db.getCollection('hero').find({"hero.5001.id" : 5001})