首页 > 解决方案 > 如何制作与时间相关的 mongodb 视图管道?

问题描述

我想创建一个名为“orders4H”的 mongodb 视图,它始终从我们的“orders”集合中返回文档,该集合的 createdAt 字段值为 <= NOW-4hours。然后,任何使用“orders4H”视图作为收集源的工具将始终获取最近 4 小时的最新订单数据。视图创建需要一个聚合管道。但是,我无法弄清楚如何制作一个在相对日期 $match 的管道。

在 mongodb 4.2 中,他们添加了一个名为 NOW 的聚合系统变量,如果我能让它在查询文档中工作,这似乎是可以使用的东西。我可以使用它来创建新字段,例如,如果我将 timeNow: "$$NOW" 放在 $addFields 阶段,我会得到一个包含当前日期时间的新字段。现在我想在查询评估中使用这个“$$NOW”。

问题的简短版本 - 我如何编写一个 $match 管道阶段,它将与文档中的日期时间字段执行服务器时间相对比较?

MongoDB 票证暗示已添加此支持......但我无法弄清楚如何在查询中使用 $$NOW 。有谁知道如何做到这一点?

以下是我找到的相关票证:

https://jira.mongodb.org/browse/SERVER-37713 https://jira.mongodb.org/browse/SERVER-23656

标签: mongodbmongodb-queryaggregation-framework

解决方案


在 mongodb 技术支持的帮助下,我能够获得一个与 mongodb 4.2 一起使用的 $match 阶段,以进行时间相关查询:

[ 
 { $match: 
  { $expr: 
   { $gt: [ 
    "$_created_at", 
     { $subtract: [ "$$NOW", 4 * 60 * 60 * 1000] } ] 
   } 
  } 
 }
]

推荐阅读