迭代游标会产生一个额外的NULL文档

时间:2013-08-12 20:29:28

标签: mongodb mongoose

这是我的代码

mongoose.connection.on('open', function(err, doc){
    console.log("connection established");

    //**Array Method**
    mongoose.connection.db.collection('simple', function(err, doc){
        if(err){
            console.log("ERROR", err);
        }else{
            doc.find().toArray(function(err, arr){
                console.log("Arr Method", arr);
            })
        }
    })

    //**Cursor Method**
    mongoose.connection.db.collection('simple', function(err, doc){
        if(err){
            console.log("ERROR", err);
        }else{
            var cur = doc.find();
            cur.each(function(err, doc){
                console.log("Cursor item", doc);
            })
        }
    })
})

数组方法的输出

Arr Method 

    [ { _id: 5209340204db66186f93043d, name: 'SUR' },
      { _id: 5209341f04db66186f93043e, name: 'SAT' },
      { _id: 520935c004db66186f93043f, name: 'THI' },
      { _id: 52093b3504db66186f930440, name: 'popo' },
      { _id: 52093cef04db66186f930441, name: 'rorb' } ]

从光标方法输出

Cursor item { _id: 5209340204db66186f93043d, name: 'SUR' }
Cursor item { _id: 5209341f04db66186f93043e, name: 'SAT' }
Cursor item { _id: 520935c004db66186f93043f, name: 'THI' }
Cursor item { _id: 52093b3504db66186f930440, name: 'popo' }
Cursor item { _id: 52093cef04db66186f930441, name: 'rorb' }
Cursor item null

我有两个问题。

  1. 为什么游标方法中有额外的日志(“Cursor item null”)。
  2. 如果我将代码(Array method and Cursor method)移出连接打开回调,那么什么都没有 打印。为什么?

1 个答案:

答案 0 :(得分:0)

  1. 这是一个关于驱动程序的问题,而不是mongoose,因为你要下载到驱动程序来创建Cursor对象。
  2. 这是驱动程序的documented behavior
  3. 因为您在建立与数据库的连接之前执行它们,所以不会打印任何内容。