Nodejs驱动程序支持哪些聚合游标方法?

时间:2014-05-30 13:15:13

标签: node.js mongodb mongoose node-mongodb-native

正如您在Mongodb aggregate()上的2.6知道的那样,操作返回一个游标,但the behavior is a bit different 比从find()返回的普通游标返回。我使用的是本机mongodb nodejs驱动程序,但无法找到有关可用聚合游标方法的正确文档。

例如,无法在聚合游标上运行count(),但有两种方法,例如cursor.objsLeftInBatch()cursor.itcount() n mongo shell。我在nodejs本机驱动程序的源代码中找不到它们中的任何一个。 Nodejs本机驱动程序或Mongoose支持哪些聚合游标方法?

1 个答案:

答案 0 :(得分:6)

使用光标从聚合返回的实际内容是node transform stream interface,其中包含一些其他便捷方法,特别是:

explain: [Function],
get: [Function],
getOne: [Function],
each: [Function],
next: [Function],

只需使用console.log转储游标对象即可获得。这些应该是自我解释的,get()方法等同于.toArray()

由于这是一个标准的流媒体接口,因此根据此接口可以使用方法和事件处理程序,所以举个例子:

  var MongoClient = require('mongodb').MongoClient;


  MongoClient.connect("mongodb://localhost/test", function(err,db) {

    var items = [];
    var counter = 0;

    var cursor = db.collection('tags').aggregate(
      [
        { "$project": {
          "t1": 1,
          "t2": 1
        }}
      ],
      { "cursor": { "batchSize": 25 } }
    );

    console.log( cursor );

    cursor.on('data', function(data) {
      console.log( this );  // dump the current state info
      items.push( data );
      counter++;
    });

    cursor.on('end', function() {
      console.log( "Iterated " + counter + " times" );
    });

  });

"数据"每次光标迭代都会触发事件,对象上的属性将显示流是完整的还是仍在迭代等等。