【发布时间】:2018-09-24 21:25:26
【问题描述】:
使用"mongodb": "^3.0.6" 保存聚合查询作为$out 运算符的结果仅在调用.toArray() 时有效。
聚合步骤:
let aggregationSteps = [{
$group: {
_id: '$created_at',
}
}, {'$out': 'ProjectsByCreated'}];
执行聚合:
await collection.aggregate(aggregationSteps, {'allowDiskUse': true})
预期结果:名为 ProjectsByCreated 的新集合。
结果:没有集合,查询没有抛出异常但没有被执行? (只需 1 毫秒)
附加 toArray() 会产生预期的行为:
await collection.aggregate(aggregationSteps, {'allowDiskUse': true}).toArray();
为什么 mongodb 只在调用 .toArray() 时创建结果集合,文档在哪里这么说?我怎样才能解决这个问题?
文档似乎没有提供有关此的任何信息:
【问题讨论】:
-
非常好的问题。听起来聚合正在返回一个游标,并且在您遍历游标(例如,使用
.toArray()添加)之前,聚合不会写出到 ProjectsByCreated 集合中。这听起来很没有帮助!如果您尝试other cursor methods,您是否调查过会发生什么? -
@VinceBowdren 手动迭代光标 - 伪代码:
while(cursor.hasNext())生成输出集合 - 仅关闭光标也不起作用。
标签: node.js mongodb aggregation-framework