2016-12-15 75 views
0

我正在尝试连接到mongoDB数据库,并在集合上创建一些进程,并在处理完所有集合项后关闭集合。当我试图接收array.length时,我得到未定义。如何获得节点js中的mongoDB集合大小?

Db = require('mongodb').Db; 
Server = require('mongodb').Server; 
const db = new Db(DB_NAME, new Server(HOST, PORT)); 
// connect to mongoDB 
db.open(function (err, db) { 
    const Collection = db.collection(COLLECTION_NAME); 
    var items = Collection.find({}); 
    var itemsLength = items.lebgth; 
    var itemsProcessed = 0; 
    items.forEach((item, index, array) => { 
    // some process like: 
    Collection.update({query}, {set}, callback) 
    itemsProcessed++; 
    if(itemsProcessed == array.length){ 
     db.close(); 
     // close connection if all items were processed 
    } 
    }); 
}); 

有没有其他方法可以做到这一点?

+1

错字在'items.lebgth'。 – str

+0

items是游标,所以你需要执行像:'var items = Collection.find({})。toArray();' –

回答

1

编辑:

您可以使用forEach可选的回调,如记录here

items.forEach((item) => { 
    // some process... 
}, (err) => db.close()); // close connection if all items were processed 
+0

items.hasNext()是一个promise对象。我该如何做这样的事情:items.hasNext((has)=> {if(!has)db.close();}); – Ruchy

+0

你说得对,我已经更新了我的答案。 – GilZ

+0

it工作只是部分,在处理所有元素之前提起了回调。 – Ruchy

2

只需使用db.collection.count()

0

检查this

Collection.stat() 
+0

这两种方式都不起作用:(在这种情况下, – Ruchy