【问题标题】:How to get matchers work with aggregation for date ranges?如何让匹配器与日期范围的聚合一起使用?
【发布时间】:2018-11-04 20:10:40
【问题描述】:

我有一个具有作者的模型(即 mongoose.Schema.ObjectId),并且我在该模型上有一个日期字段(类型 Date)。

当我这样做时,它工作,数据回来了:

MyModel.find({
    author: req.user._id,
    started: {
      $gte: start,
      $lte: end
    }
  });

但是我的 Schema 中有一个聚合函数,它是这样的:

myModelSchema.statics.getSomeData = function getSomeData(id, start, end) {
  const query = [
    { $sort: { started: 1 } },
    {
      $lookup: {
        from: 'projects',
        localField: 'project',
        foreignField: '_id',
        as: 'projectdata'
      }
    },
    {
      $lookup: {
        from: 'tasks',
        localField: 'task',
        foreignField: '_id',
        as: 'taskdata'
      }
    }
  ];
  if (start && end) {
    query.unshift({
      $match: {
        $and: [{ started: { $gte: start, $lte: end } }, { author: id }]
      }
    });
  } else {
    query.unshift({ $match: { author: id } });
  }
  return this.aggregate(query);
};

注意:我为作者推送匹配器的部分,它获取了当前作者的所有数据作品,但我也想要的部分返回日期范围内的数据不起作用,数据为空,开始和结束日期被传递给静态函数。

我传递给聚合函数的日期格式:'2018-11-04 06:00:00'(字符串)。

【问题讨论】:

  • 你能更新你在开始和结束日期传递的描述中的日期格式吗?
  • @AlokDeshwal 是的,完成了。
  • 您正在传递字符串,但它应该是一个日期对象,因此只需从该字符串创建日期对象并传递它,或者您可以将字符串传递给new Date(datestringgoeshere)
  • @AlokDeshwal,做到了。非常感谢,我想知道为什么它没有引起我的注意。无论如何,如果你想回答这个问题,我可以接受。

标签: javascript mongodb mongoose mongoose-schema


【解决方案1】:

实际上你正在匹配一个日期对象和一个根本不起作用的字符串值,所以值也应该是一个日期对象

myModelSchema.statics.getSomeData = function getSomeData(id, start, end) {
const query = [
    { $sort: { started: 1 } },
    {
    $lookup: {
        from: 'projects',
        localField: 'project',
        foreignField: '_id',
        as: 'projectdata'
    }
    },
    {
    $lookup: {
        from: 'tasks',
        localField: 'task',
        foreignField: '_id',
        as: 'taskdata'
    }
    }
];
if (start && end) {
    query.unshift({
    $match: {
        $and: [{ started: { $gte: new Date(start), $lte: new Date(end) } }, { author: id }]
    }
    });
} else {
    query.unshift({ $match: { author: id } });
}
return this.aggregate(query);
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多