MongoDB:$ all with empty array ...

时间:2015-04-24 19:49:02

标签: mongodb find

我正在使用这些文档对集合运行查询。

{"name": "Daniel", "tags": ["person", "owner", "father"]},
{"name": "Jane", "tags": ["person", "owner", "mother"]},
{"name": "Jimmy", "tags": ["person", "owner", "son"]}

现在,如果我想找到与标签人和所有者匹配的所有文件,我会做这样的事情

var match = ['person', 'owner'];
model.find({'tags': {$all: match}});

现在我需要做以下事情:

  1. 当匹配具有值时,返回与那些匹配的所有文档(已完成)
  2. 当匹配为空[]时,返回所有文件。
  3. 在单个查询中执行此操作的最有效方法是什么?

    提前致谢,

    d

1 个答案:

答案 0 :(得分:0)

我建议您在应用程序层中添加条件,并使在服务器上执行的query非常简单。

  • 如果match数组包含一个或多个元素,请添加一个查询字段 你的查询condition,否则执行一个空的条件 归你所有的文件。

片段:

var match = ['person', 'owner'];
var condition = {};
if(match.length > 0){
   condition["tags"] = {$all:match};
}
db.model.find(condition);

说到这一点,使用$all运算符,无法在单个查询中同时实现这两个条件。

  

$ all运算符选择字段值所在的文档   包含所有指定元素的数组。