mongodb - 如何制作与时间相关的 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
解决方案
在 mongodb 技术支持的帮助下,我能够获得一个与 mongodb 4.2 一起使用的 $match 阶段,以进行时间相关查询:
[
{ $match:
{ $expr:
{ $gt: [
"$_created_at",
{ $subtract: [ "$$NOW", 4 * 60 * 60 * 1000] } ]
}
}
}
]
推荐阅读
- react-native - 如何在 react native 中使用 immutable.js 和 redux-actions 从 firestore 获取数据?
- ruby-on-rails - Added to autoload paths but not loaded
- javascript - Insert values from buttons dynamically
- java - 具有背压的反应式 SQS 轮询器
- tomcat - jython 语法错误不匹配输入 'as' 期望冒号
- android - Implications of setting a lower targetSdkVersion for the app
- sphinx - How I should tune Sphinx?
- python - Click: how do I apply an action to all commands and subcommands but allow a command to opt-out (part duex)?
- javascript - I want to populate radio button input with json data
- haskell - Haskell beginner how did I get to IO ( IO String )