MongoDB $匹配任何东西

时间:2015-04-27 14:09:32

标签: angularjs mongodb

在前端,

  <select ng-model="selected.year">
      <option value=""></option>
      <option value="2015">2015</option>
      <option value="2014">2014</option>
  </select>
  <select ng-model="selected.year">
      <option value=""></option>
      <option value="2015">2015</option>
      <option value="2014">2014</option>
  </select>
  <select ng-model="selected.month">
      <option value=""></option>
      <option value="Apr">Apr</option>
      <option value="May">May</option>
  </select>
$scope.params = {year: '2015', month: 'Apr', type: 'A'}

选择所有方框时效果很好,但我想让它变得灵活,不必选择所有内容,这意味着如果用户只选择年份和月份,它将返回所有类型&#39; ;

在服务器端,查询如下所示:

Collection.aggregate({ $match: { year: req.body.year, month: req.body.month, type: req.body.type}
}....etc)

问题是,如果未选择其中一个字段,则不返回任何内容。我如何要求MongoDB返回所有未选择的字段?

1 个答案:

答案 0 :(得分:1)

您可以通过以编程方式构建$match值来省略没有值的字段来执行此操作:

var match = {};
if (req.body.year) {
    match.year = req.body.year;
}
if (req.body.month) {
    match.month = req.body.month;
}
if (req.body.type) {
    match.type = req.body.type;
}
Collection.aggregate({ $match: match}, ...);