javascript - 如何让匹配器使用日期范围的聚合?

标签 javascript mongodb mongoose mongoose-schema

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

当我这样做时它有效,数据返回:

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'(一个字符串)。

最佳答案

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

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

关于javascript - 如何让匹配器使用日期范围的聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53140439/

相关文章:

javascript - 在 Javascript 中检测浏览器的默认搜索引擎

mongodb - 你将如何在 MongoDB 中对此进行建模?

java - Hibernate OGM OneToMany self 引用

node.js - 使用虚拟数据库在自己的环境中测试express.js应用程序

javascript - 无法将新寄存器发送到我的数据库 mongodb

javascript - 未捕获的类型错误 : cannot read 'hasClass' property of undefined

javascript - 幂函数。为什么在循环开始时设置 result = 1?

javascript - 如何将数据保存到本地存储?

mongodb - MongoDB 集合中可以包含另一个集合吗?

javascript - 无法完成 GET 请求