在node.js中使用MongoDB$out聚合运算符

在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

有人知道如何使用$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 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()。。。