在node.js中使用MongoDB$out聚合运算符
有人知道如何使用$out操作符将MongoDB聚合函数的结果推送到node.js中的新集合中吗 这就是我所拥有的:在node.js中使用MongoDB$out聚合运算符,node.js,mongodb,Node.js,Mongodb,有人知道如何使用$out操作符将MongoDB聚合函数的结果推送到node.js中的新集合中吗 这就是我所拥有的: var fs = require('fs'); var assert = require('assert'); var ObjectId = require('mongodb').ObjectID; var MongoClient = require('mongodb').MongoClient , format = require('util').format; var
var fs = require('fs');
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
var createGroups = function(db, callback) {
db.collection('people').aggregate(
[
{ $group: { "_id": "$code", "sendees" : {$push : "$email"}, "count": { $sum: 1 } } }
]
).toArray(function(err, result) {
assert.equal(err, null);
console.log(result);
callback(result);
});
};
MongoClient.connect('mongodb://localhost:12121/systest', function(err, db) {
assert.equal(null, err);
createGroups(db, function() {
db.close();
});
});
输出到控制台很好,正如我所期望的那样-但是我在尝试将其导出到新集合时运气不佳
谢谢 您只需在聚合中提供
$out
。看
因此,您的代码应该如下所示:
db.collection('people').aggregate(
[
{
$group: {
"_id": "$code",
"sendees" : {$push : "$email"},
"count": { $sum: 1 }
}
},
{
$out: "collection name"
}
]
)
db.collection(“人”).aggregate(
[
{
$group:{
“_id”:“$code”,
“发件人”:{$push:$email},
“计数”:{$sum:1}
}
},
{
$out:“集合名称”
}
]
)
您可以尝试使用软件包,将聚合结果保存到Mongo版本<2.6的集合中。如果您的MongoDB版本为2.6或更高版本,则该模块将作为直通模块,并将使用本机功能:
var aggregateOut = require('mongo-aggregate-out'),
pipelineArray = [
{
$group: {
"_id": "$code",
"sendees" : {$push : "$email"},
"count": { $sum: 1 }
}
}
];
var createGroups = function(db, callback) {
aggregateOut(db.collection('people'), pipelineArray, { out: "newCollection"},
function (err) {
assert.equal(err, null);
var cur = db.collection('newCollection').find();
callback(cur);
});
};
谢谢你们的回答,伙计们,两位都很有帮助。碰巧,在$out出现之前,我使用的是一个过时的mongo版本,但一旦我整理好它并按照上面的建议做了,它就工作得很好。我发现,
$out
似乎确实有效,但也有一个out
参数可以提供给Node.js驱动程序的aggregate()
函数,看见因此,db.collection(name).aggregate([..pipeline…],{out:'collection name'})似乎对我很有用,尽管我确实发现,如果我没有在第三个参数中提供回调函数,或者在('data',…')'上处理
,在('end',..)上处理,,聚合似乎会被锁定
在从aggregate()。。。