mongoose $ aggregation $匹配$或日期之间

时间:2016-07-13 18:55:32

标签: node.js mongodb mongoose aggregation-framework or-operator

我想在aggegration中这样过滤。这是一个mongoose查询的例子。我想在aggegration中做同样的事情。我想做的是在2016-06-01T22:52:46Z和2016-06-02T22:52:46Z和其他值之间进行所有测量

<body ng-app="adt">
    <div ng-controller="MainCtrl>
        <a href="#" ng-click="addOne()">AddNumber</a>
        {{numberCounter}}
    </div>

    <div ng-view=""></div>
</body>

这是我尝试的但它没有做同样的工作。 IDE说出了公开的密钥&#39; date&#39;

Measurement
  .find({})
  .or([{
    'date': {
      '$gte': ISODate('2016-06-01T22:52:46Z'),
      '$lte': ISODate('2016-06-02T22:52:46Z')
    }
  }, {
    'date': {
      '$gte': ISODate('2016-06-10T22:52:46Z'),
      '$lte': ISODate('2016-06-11T22:52:46Z')
    }
  }, {
    'date': {
      '$gte': ISODate('2016-06-14T22:52:46Z'),
      '$lte': ISODate('2016-06-15T22:52:46Z')
    }
  }, {
    'date': {
      '$gte': ISODate('2016-06-26T22:52:46Z'),
      '$lte': ISODate('2016-06-27T22:52:46Z')
    }
  }])
  .exec();

1 个答案:

答案 0 :(得分:1)

你有一些数据的例子吗? 试试这段代码:

db.measurements.aggregate([{
  $match: {
    $or: [
    { date: {
        '$gte': ISODate('2016-06-01T22:52:46Z'),
        '$lte': ISODate('2016-06-02T22:52:46Z')
      }},
      { date: {
        '$gte': ISODate('2016-06-10T22:52:46Z'),
        '$lte': ISODate('2016-06-11T22:52:46Z')
      }},
      { date: {
        '$gte': ISODate('2016-06-14T22:52:46Z'),
        '$lte': ISODate('2016-06-15T22:52:46Z')
      }},
      { date: {
        '$gte': ISODate('2016-06-26T22:52:46Z'),
        '$lte': ISODate('2016-06-27T22:52:46Z')
      }}
    ]
  }
}]);