首页 > 解决方案 > 无法在 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 作业中执行聚合函数时会出现此问题

标签: mongodbcronaggregation-frameworkcron-tasknode-cron

解决方案


合并选项不起作用。但是我使用了聚合方法的回调函数并更新了结果

dbColl.aggregate([
       -----------------
       some calculations
       -----------------
       { $merge: { into: { db: 'db-name', coll: 'collection-name' } } }
     ], (err, docs) => {
          if(!err && docs){
             db.collection.updateMany(docs);
          }
     })

推荐阅读