簡體   English   中英

如何使匹配器與日期范圍的匯總一起使用?

[英]How to get matchers work with aggregation for date ranges?

我有一個具有作者的模型(即mongoose.Schema.ObjectId),並且該模型上有一個日期字段(類型為Date)。

的工作原理我這樣做的時候,數據回來:

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

但是我的架構中有一個聚合函數,它是這樣的:

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” (字符串)。

實際上,您正在將日期對象與根本不起作用的字符串值匹配,因此value也應該是日期對象

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM