Javascript 基于日期的mongodb查询+;从文件开始的x天
使用以下文档和道具来考虑这个mongo集合Javascript 基于日期的mongodb查询+;从文件开始的x天,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,使用以下文档和道具来考虑这个mongo集合 {sku: '3344', frequency: 30, lastProccessedDate: 2021-01-07 15:18:07.576Z}, {sku: '2233', frequency: 30, lastProccessedDate: 2021-02-16 15:18:07.576Z}, {sku: '1122', frequency: 30, lastProccessedDate: 2021-04-13 15:18:07.576Z}
{sku: '3344', frequency: 30, lastProccessedDate: 2021-01-07 15:18:07.576Z},
{sku: '2233', frequency: 30, lastProccessedDate: 2021-02-16 15:18:07.576Z},
{sku: '1122', frequency: 30, lastProccessedDate: 2021-04-13 15:18:07.576Z}
我想用
(lastProcessedDate+frequency(days))查询并获取所有文档。很遗憾,我无法为mongoose提供解决方案。但以下是Mongo查询,它返回您想要的结果:
db.getCollection("yourCollection").aggregate([
{
$project: {
_id: 1,
sku: 1,
frequency: 1,
lastProccessedDate: 1,
shiftedDate: {
$add: [
"$lastProccessedDate", { $multiply: [ 24 * 60 * 60 * 1000, "$frequency" ] }
]
}
}
}, {
$match: {
shiftedDate: { $lte: new Date() }
}
}, {
$project: {
_id: 1,
sku: 1,
frequency: 1,
lastProccessedDate: 1,
}
}
])
首先,我们将文档转换为新的表单,其中包含相同的字段和一个新的临时字段,即定义为lastprocessedDate+频率(天)
(请注意,我们实际上添加了毫秒,因此查询中有24*60*60*1000
)。然后我们只选择shiftedDate
小于(或等于)当前时间戳的文档(newdate()
返回当前时间戳)。最后,我们将过滤后的文档转换为原始表单,而不使用以前用于过滤文档的临时字段
也许有一个更好的解决方案可以获取您想要的文档,但是这个方案也可以解决您的问题。您可以使用$set
而不是$project
。然后保存所有的xx:1