我无法通过聚合选项参数获得结果。这是我的聚合:-
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/