按键查询多级MongoDB对象

时间:2013-07-19 14:29:06

标签: mongodb

如果您只知道密钥名称(例如“昵称”),而不知道对象中该密钥的确切路径。

e.g。昵称可能在第一级,如:

{"nickname":"Howie"}

或在第二级:

{"user":{"nickname":"Howie"}}

是否可以查询将返回两个文件的昵称“Howie”?

1 个答案:

答案 0 :(得分:3)

不幸的是,没有通配符允许您在数据库中的任何级别搜索字段。如果位置不相关且您可以修改文档结构,则此处有2个选项。您可以将文档存储为

{ fieldname:"nickname", value : "Howie" }
{ fieldname:"user/nickname", value: "Howie" }

然后,您可以使用

进行查询
db.so.find({fieldname:/nickname/, value:"Howie"})

或者您可以存储为

db.so.insert({value:"Howie", fieldpath:["nickname"]})
db.so.insert({value:"Howie", fieldpath:["user", "nickname"]})

第二种方法的优点是你现在可以索引{fieldpath:1,value:1}并对其进行查询,例如

db.so.find({fieldpath:"nickname", value:"Howie"})

将是一个索引查询。