Javascript 使用cursor.forEach()时何时调用db.close()?

Javascript 使用cursor.forEach()时何时调用db.close()?,javascript,node.js,mongodb,cursor,Javascript,Node.js,Mongodb,Cursor,如果使用.toArray(),我知道您可以在回调中使用db.close(),如下所示: db.collection('grades').find(query).toArray(function(err, docs) { if (err) throw err; console.dir(docs); db.close(); }); 但是如果需要在数组上迭代,该怎么办?1)遍历光标来构造数组,然后2)遍历数组来完成工作,这似乎有些过分。所以我想用它会很好 但是,这给了我一个错误: ~/c

如果使用
.toArray()
,我知道您可以在回调中使用
db.close()
,如下所示:

db.collection('grades').find(query).toArray(function(err, docs) {
  if (err) throw err;
  console.dir(docs);
  db.close();
});
但是如果需要在数组上迭代,该怎么办?1)遍历光标来构造数组,然后2)遍历数组来完成工作,这似乎有些过分。所以我想用它会很好

但是,这给了我一个错误:

~/code/m101js $ node test.js
/Users/azerner/code/node_modules/mongodb/lib/utils.js:97
    process.nextTick(function() { throw err; });
                                        ^
TypeError: undefined is not a function
    at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:527:15
    at handleCallback (/Users/azerner/code/node_modules/mongodb/lib/utils.js:95:12)
    at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:493:22
    at handleCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:234:5)
    at /Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:533:22
    at queryCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:167:20)
    at Callbacks.flush (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:86:7)
    at Server.destroy (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:694:41)
    at Server.close (/Users/azerner/code/node_modules/mongodb/lib/server.js:344:17)
    at Db.close (/Users/azerner/code/node_modules/mongodb/lib/db.js:273:19)
~/code/m101js $ node test.js
/Users/azerner/code/node_modules/mongodb/lib/utils.js:97
    process.nextTick(function() { throw err; });
                                        ^
TypeError: undefined is not a function
    at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:527:15
    at handleCallback (/Users/azerner/code/node_modules/mongodb/lib/utils.js:95:12)
    at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:493:22
    at handleCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:234:5)
    at /Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:533:22
    at queryCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:167:20)
    at Callbacks.flush (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:86:7)
    at Server.destroy (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:694:41)
    at Server.close (/Users/azerner/code/node_modules/mongodb/lib/server.js:344:17)
    at Db.close (/Users/azerner/code/node_modules/mongodb/lib/db.js:273:19)
~/code/m101js $
它似乎都是库代码,我不确定如何调试它。但问题似乎出在
db.close()

  • 是这样吗
  • 如果是这样的话,那么我还能把
    db.close()
    放在哪里呢

  • 问题是调用了
    db.close()
    ,然后我试图与数据库交互。连接已关闭时,无法与数据库交互

    我的代码在连接关闭后试图与数据库交互的原因是
    .update()
    是异步的


    对我来说,这很有用<代码>异步。每个都提供一个回调,在对集合中的所有内容进行迭代后运行。我在那个回调中调用了
    db.close()
    ,当时我想关闭与数据库的连接。

    你为什么要关闭它?@adeneo我不确定。事实上,我正在做一个测试,但不太确定我在做什么。但是,除非在这种情况下您永远不想关闭它,否则我的问题仍然存在。一般来说,我认为大多数应用程序只需连接一次,并保持连接打开,实际上没有必要为每次对DBA的调用关闭连接。我猜
    forEach
    调用是异步的,而且
    update
    肯定是,因此您可能正在关闭连接,而您仍在使用它。请查看此答案:。我认为这应该有帮助。
    ~/code/m101js $ node test.js
    /Users/azerner/code/node_modules/mongodb/lib/utils.js:97
        process.nextTick(function() { throw err; });
                                            ^
    TypeError: undefined is not a function
        at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:527:15
        at handleCallback (/Users/azerner/code/node_modules/mongodb/lib/utils.js:95:12)
        at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:493:22
        at handleCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:234:5)
        at /Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:533:22
        at queryCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:167:20)
        at Callbacks.flush (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:86:7)
        at Server.destroy (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:694:41)
        at Server.close (/Users/azerner/code/node_modules/mongodb/lib/server.js:344:17)
        at Db.close (/Users/azerner/code/node_modules/mongodb/lib/db.js:273:19)
    ~/code/m101js $ node test.js
    /Users/azerner/code/node_modules/mongodb/lib/utils.js:97
        process.nextTick(function() { throw err; });
                                            ^
    TypeError: undefined is not a function
        at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:527:15
        at handleCallback (/Users/azerner/code/node_modules/mongodb/lib/utils.js:95:12)
        at /Users/azerner/code/node_modules/mongodb/lib/cursor.js:493:22
        at handleCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:234:5)
        at /Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:533:22
        at queryCallback (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/cursor.js:167:20)
        at Callbacks.flush (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:86:7)
        at Server.destroy (/Users/azerner/code/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:694:41)
        at Server.close (/Users/azerner/code/node_modules/mongodb/lib/server.js:344:17)
        at Db.close (/Users/azerner/code/node_modules/mongodb/lib/db.js:273:19)
    ~/code/m101js $