2

如果您只知道键名(比如“昵称”),但不知道对象中该键的确切路径。

例如,昵称可能位于第一级,例如:

{"nickname":"Howie"}

或在第二级:

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

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

4

1 回答 1

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"})

将是一个索引查询。

于 2013-07-22T20:53:22.403 回答