我正在对包含此类文档的集合运行查询。
{"name": "Daniel", "tags": ["person", "owner", "father"]},
{"name": "Jane", "tags": ["person", "owner", "mother"]},
{"name": "Jimmy", "tags": ["person", "owner", "son"]}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想查找与标签人和所有者匹配的所有文档,我会这样做
var match = ['person', 'owner'];
model.find({'tags': {$all: match}});
Run Code Online (Sandbox Code Playgroud)
现在我需要执行以下操作:
在单个查询中执行此操作的最有效方法是什么?
提前致谢,
D
我建议您在应用程序层添加条件,并使query在服务器上执行的条件保持非常简单。
match数组有一个或多个元素,请向您的查询添加一个查询字段condition,否则执行一个空条件,这将返回所有文档。片段:
var match = ['person', 'owner'];
var condition = {};
if(match.length > 0){
condition["tags"] = {$all:match};
}
db.model.find(condition);
Run Code Online (Sandbox Code Playgroud)
话虽如此,使用$all运算符,不可能在单个查询中实现这两个条件。
$all 运算符选择字段值为包含所有指定元素的数组的文档。