如果您只知道密钥名称(例如“昵称”),而不知道对象中该密钥的确切路径。
e.g。昵称可能在第一级,如:
{"nickname":"Howie"}
或在第二级:
{"user":{"nickname":"Howie"}}
是否可以查询将返回两个文件的昵称“Howie
”?
答案 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"})
将是一个索引查询。