2

我想在聚合中像这样过滤。这是一个猫鼬查询的例子。我想在聚合中做同样的事情。我想要做的是获取 2016-06-01T22:52:46Z 和 2016-06-02T22:52:46Z 和其他值之间的所有测量值

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();

这是我尝试过的,但它没有做同样的工作。IDE 说重复键“日期”

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')
      }
    }]
  }
}]);
4

1 回答 1

2

你有一些数据示例吗?试试这个代码:

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')
      }}
    ]
  }
}]);
于 2016-07-13T19:13:31.037 回答