mongodb - MongoDB保存聚合结果并检索保存的结果
问题描述
我的 mongo 版本是 3.4
我正在运行一个复杂的聚合并将结果写入使用$out
阶段的集合。
我想要做的是,如果该聚合之前运行并且结果存在于目标集合中,则只需返回保存的结果而不重新运行整个管道。
问题 1 是,当$out
使用聚合时,聚合不返回任何结果,所以我必须向目标集合发送单独的查询来检索它们。
问题 2 是,我需要另一个查询来检查之前是否运行过聚合。
是否可以将所有 3 个查询组合到一个管道中,所以它会:
- 检查 outCollection,如果给定 user_id 的结果存在,则返回它
- 如果没有,运行管道并将结果保存到 outCollection
- 返回聚合结果
我目前的管道看起来像:
db.getCollection('sourceCollection').aggregate([
{
$match: {
user_id: "myUserId"
}
},...//perform various steps
{
$out: "outCollection"
}],{
allowDiskUse: true
})
结果保存到 outCollection 的文档中,例如:
{ user_id: "myUserId", aggResult: [...] }
解决方案
推荐阅读
- python - 使用 .join() 在 Python 中为数组中除第一列之外的所有列着色
- php - php pdo 无法执行更改语句
- delphi - 放大 api:与实际尺寸不成比例的屏幕截图
- powershell - 缺少容器 Cmdlet
- php - 谷歌 oauth2/日历 getRefreshToken 返回 NULL
- c - 执行for循环
- python - Jinja2 Django Python groupby('attribute') 自定义排序的石斑鱼
- python - 如何将 django 模型字段传递给函数并将变量返回到上下文以在模板中使用
- javascript - 该参数应作为 javascript 正文中的函数执行
- python - 如何在烧瓶中使用 Ajax 提供的数据?