在$ match中使用$ max

时间:2017-08-11 09:53:41

标签: mongodb mongodb-query

我想通过仅处理由时间戳定义的最新条目来过滤将进入聚合链的对象。

目前,我在new Date().getTime() - (1000 * 60 * 5)中使用$match查找过去5分钟内的所有条目。

工作示例

fetchedAtTime是一个unix时间戳)

db.getCollection('data').aggregate([
    { $match: {"fetchedAtTime": {$gte: new Date().getTime() - (1000 * 60 * 5)}} },
    { $group: {
        _id: "$name",
        latestFetchedAtTime: {$max: "$fetchedAtTime"},
        oldestFetchedAtTime: {$min: "$fetchedAtTime"}
    }}
]);

问题

但我不想使用new Date()。我想从最重新发送的fetchedAtTime条目中减去5分钟(对于因任何原因没有新条目添加到数据库的情况)。

所以我尝试将$max添加到$match中,但我的尝试都没有成功。

非工作示例

(为了便于阅读,我将所有$match es放在一个代码块中 - 单独试用了它们

db.getCollection('data').aggregate([
    { $match: {"fetchedAtTime": {$gte: { $subtract: [{$max: "$fetchedAtTime"}, (1000 * 60 * 5)]}}} },
    { $match: {"fetchedAtTime": {$gte: { $subtract: [new Date({$max: "$fetchedAtTime"}).getTime(), (1000 * 60 * 5)]}}} },
    { $match: {"fetchedAtTime": {$gte: new Date({$max: "$fetchedAtTime"}).getTime() - (1000 * 60 * 5)}} },
    { $group: {
        _id: "$name",
        latestFetchedAtTime: {$max: "$fetchedAtTime"},
        oldestFetchedAtTime: {$min: "$fetchedAtTime"}
    }}
]);

有没有办法将其存档在一个聚合链中?

0 个答案:

没有答案