mongodb - 无法在 nodejs+mongodb 的 cron 作业中执行 $merge 聚合
问题描述
我尝试创建一个cron
从一个集合中获取数据并使用聚合方法执行一些操作的作业,最后将输出转储到同一数据库中的另一个集合(使用$merge
)。如果我在 mongo shell 中尝试聚合代码,那么$merge
就会成功。但是当它在 cron 作业中完成时,我可以看到正在执行聚合,但结果没有被转储到目标集合(应该由 完成$merge
)。
这是我尝试实现的代码
const CronJob = require('cron').CronJob;
const job = new CronJob( '* * * * *', () => {
console.log('Cron Job started');
dbColl.aggregate([
-----------------
some calculations
-----------------
{ $merge: { into: { db: 'db-name', coll: 'collection-name' } } }
], (err, docs) => {
if(!err && docs){
console.log('Cron Job ended');
console.log(docs); //I'm getting the correct output for the docs
}
})
})
结果
Cron Job started
Cron Job ended
{
---docs---
}
注意:聚合函数没有问题,因为我在 mongo shell 中对其进行了测试。在 cron 作业中执行聚合函数时会出现此问题
解决方案
合并选项不起作用。但是我使用了聚合方法的回调函数并更新了结果
dbColl.aggregate([
-----------------
some calculations
-----------------
{ $merge: { into: { db: 'db-name', coll: 'collection-name' } } }
], (err, docs) => {
if(!err && docs){
db.collection.updateMany(docs);
}
})
推荐阅读
- python - 使用python实现二叉搜索树
- python - Python:在不使用 .append() 的情况下为子列表分配多个值?
- c# - ReshSharp - 请求返回不同的响应
- html - 如何为我的网站创建临时链接?
- reactjs - 在图表上单击鼠标获取(X,Y)点
- android - java.lang.IllegalStateException:应为 BEGIN_ARRAY,但路径为 BEGIN_OBJECT
- javascript - 将文件上传到谷歌驱动器并使用 php 共享链接
- proxy - 尝试使用边车代理连接到网络时出现错误连接被拒绝
- laravel - AWS Beanstalk https 问题
- django - model = Sell NameError: name 'Sell' 未定义