MongoDB在嵌套对象KEY(JSON)

时间:2016-08-18 12:34:27

标签: json mongodb nested

非常新,并且在MongoDB上绝对没有受过教育。

拥有这个JSON结构:

{
"id": "123456",
"makes": {
    "abc": {
        "att1": 4,
        "att2": "fffff",
        "att3": 46
        },
    "fgh": {
        "att1": 8,
        "att2": "ggggg",
        "att3": 6
    },
    "rty": {
        "att1": 3,
        "att2": "hhhh",
        "att3": 4
        },
    "iop": {
        "att1": 4,
        "att2": "llll",
        "att3": 3
        }
}

}

如何查询数据库中的“fgh”make? 我试过了:

db.<myCollection>.find({"makes":"fgh"})

但这不起作用。 如果我写的话,它可以正常工作:

db.<myCollection>.find({"makes.fgh.att1":8})

提前谢谢你!

1 个答案:

答案 0 :(得分:5)

当您尝试查询makes.fgh时,您不会对内容进行查询,而是对结构进行查询,因为“fgh”不是值而是子文档。

您可以使用$ exists搜索来实现此目的:

db.myCollection.find( { "makes.fgh" : { $exists : true } })

请参阅https://docs.mongodb.com/manual/reference/operator/query/exists/以供参考。

整合@ chridam的有用评论:

如果您只对那个子文档感兴趣,还可以在查找中添加投影:

db.myCollection.find({ "makes.fgh" : { $exists : true }}, { "makes.fgh" : 1 })

详情请查看https://docs.mongodb.com/manual/reference/method/db.collection.find/#db.collection.find