node.js - Mongoose 错误 : Arguments must be aggregate pipeline operators

标签 node.js mongodb mongoose mongodb-query aggregation-framework

我无法通过聚合选项参数获得结果。这是我的聚合:-

var emails = getAllEmails();
var listMatchColl = 'list_matches_' + insertedId;
SurveyDL.aggregate([
     { $match: { email: { $in: emails } } },
     { $out: listMatchColl }
 ], {
   allowDiskUse: true
 }).exec(function(err, data) {
  if (err) return console.log('err', err);
    console.log('data',data);
 });
}

当我执行上面的代码时,它抛出了错误,即

Error: Arguments must be aggregate pipeline operators at Aggregate.append (/home/vivek/nrich/node_modules/mongoose/lib/aggregate.js:89:11) at new Aggregate (/home/vivek/nrich/node_modules/mongoose/lib/aggregate.js:48:17)

我也使用了替代方法,但它仍然抛出相同的错误。替代方式:-

var emails = getAllEmails();
var listMatchColl = 'list_matches_' + insertedId;
SurveyDL.aggregate([
     { $match: { email: { $in: emails } } },
     { $out: listMatchColl }
 ], {
   allowDiskUse: true
 },function(err, data) {
  if (err) return console.log('err', err);
    console.log('data',data);
 });

最佳答案

尝试设置 allowDiskUse() 聚合查询的选项:

var emails = getAllEmails();
var listMatchColl = 'list_matches_' + insertedId;
SurveyDL.aggregate([
    { '$match': { 'email': { '$in': emails } } },
    { '$out': listMatchColl }
 ]).allowDiskUse(true)
   .exec(function(err, data) {
        if (err) return console.log('err', err);
        console.log('data',data);
    }); 

或使用流畅的 API:

SurveyDL.aggregate()
        .match({ 'email': { '$in': emails } })
        .append({ '$out': listMatchColl })
        .allowDiskUse(true)
        .exec(function(err, data) {
            if (err) return console.log('err', err);
            console.log('data',data);
        });

您可能正在运行超过 16MB 的聚合大小 limit allowDiskUse()如果您的数据大于 16MB,则 选项是不够的,因为它只允许您在数据很大时使用排序。考虑使用聚合 cursor 用于访问您的聚合文档的表单:

var cursor = SurveyDL.aggregate([
    { $match: { email: { $in: emails } } }    
 ]).cursor({ batchSize: 1000 }).exec();

cursor.each(function(error, doc) {
  // use doc
}); 

关于node.js - Mongoose 错误 : Arguments must be aggregate pipeline operators,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37340632/

相关文章:

ruby-on-rails - Mongoid 命名空间模型和继承

node.js - 当嵌套数组为空时,$lookup 和 $unwind 不会给出结果

node.js - Mongodb 4.0 Transactions with Mongoose 和 NodeJs, Express

javascript - Mongoose .save() 和使用 update() 之间的区别

node.js - Nodejs + ExpressJS 中的类成员继承

node.js - 是否有用于 node.js 的阻塞 redis 库?

linux - 如何找到最后一个spwan线程或进程?

spring mongo数据异常,通过xml配置

node.js - header 未定义

Java Mongodb 客户端