我有这个数据结构:
{
"_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})
答案 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})