如果您只知道键名(比如“昵称”),但不知道对象中该键的确切路径。
例如,昵称可能位于第一级,例如:
{"nickname":"Howie"}
或在第二级:
{"user":{"nickname":"Howie"}}
是否可以查询Howie
将返回两个文档的昵称等于“”?
如果您只知道键名(比如“昵称”),但不知道对象中该键的确切路径。
例如,昵称可能位于第一级,例如:
{"nickname":"Howie"}
或在第二级:
{"user":{"nickname":"Howie"}}
是否可以查询Howie
将返回两个文档的昵称等于“”?
不幸的是,没有通配符允许您在数据库中搜索任何级别的字段。如果职位不相关,您可以修改文档结构,您有 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"})
将是一个索引查询。