vin*_*eet 3 mongoose mongodb node.js 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);
});
}
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,它抛出并出现错误,即
错误:参数必须是Aggregate.append(/home/vivek/nrich/node_modules/mongoose/lib/aggregate.js:89:11)聚合管道运营商的新聚合(/ 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);
});
Run Code Online (Sandbox Code Playgroud)
chr*_*dam 11
尝试设置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);
});
Run Code Online (Sandbox Code Playgroud)
或使用流畅的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);
});
Run Code Online (Sandbox Code Playgroud)
您可能正在运行超过16MB的聚合大小限制,allowDiskUse()如果您的数据大于16MB ,则该选项是不够的,因为它只允许您在数据较大时使用排序.考虑使用聚合cursor表单来访问聚合文档:
var cursor = SurveyDL.aggregate([
{ $match: { email: { $in: emails } } }
]).cursor({ batchSize: 1000 }).exec();
cursor.each(function(error, doc) {
// use doc
});
Run Code Online (Sandbox Code Playgroud)