【问题标题】:Node MongoDB: connection method callbacks never fireNode MongoDB:连接方法回调永远不会触发
【发布时间】:2013-10-10 15:07:49
【问题描述】:

我从 MongoDB Node documentation 复制一个示例(几乎从字面上看,MongoDB 的官方文档尚未更新以匹配 the recommendation to use MongoClient,所以我使用的是 MongoClient)。

createcollection() 的回调永远不会运行。我在使用其他连接方法时也遇到过类似的问题,例如 find()、findAndModify()。

直接复制单元测试:

mongodb.MongoClient.connect(URL, function(err, db){
  // Establish connection to db
  log(1)
  assert.equal(null, err);

  // Grab a collection without a callback no safe mode
  var col1 = db.collection('test_correctly_access_collections');

  // Grab a collection with a callback but no safe operation
  db.collection('test_correctly_access_collections', function(err, col2) {
    log(2)
    assert.equal(null, err);

    // Grab a collection with a callback in safe mode, ensuring it exists (should fail as it's not created)
    db.collection('test_correctly_access_collections', {strict:true}, function(err, col3) {
      log(3)
      assert.ok(err != null);

      // Create the collection
      db.createCollection('test_correctly_access_collections', function(err, result) {
        log(4)
        // NEVER RUNS
      });
    });
  });
})

从其他阅读中,我听说如果连接断开或速度很慢,Mon​​goDB 会将查询排队。但是 connect() 工作正常,我的数据库是 localhost 并且有

我的问题是:

  • 如何使收集方法起作用?
  • 我在哪里可以了解查询将排队的情况?我一直在查看的官方文档中似乎没有提到这一点。

编辑:代码每个 URL 只会工作一次。随后尝试使用相同的 URL 运行相同的代码将始终失败。更改 URL 将再次起作用,每个 URL 一次。

【问题讨论】:

  • 也许不是很有帮助,但是当我使用URL='mongodb://localhost/bop' 运行它时,所有回调都会被调用。
  • 代码正常工作(一般来说,作为快速测试验证它)。 Node.JS 的本机驱动程序不会排队,但 MongooseJS 会(包装 NodeJS 驱动程序)。除了您的问题之外,您还有其他代码吗?
  • 我第二次收到 assert.ok(err != null); 失败,因为集合存在,所以,不,我没有到达 4
  • 当集合不存在时,断言检查带有strict 设置的db.collection 失败。问题是,第二次运行它时,它确实 存在,因此您将返回 null 作为 err,并且断言失败。测试基本上假设数据库是干净的,可以正常运行。
  • @hurshagrawal 是的,在下面添加了答案。当前的 node-mongodb-native 已损坏,MongoDB Inc/10Gen 知道。

标签: node.js mongodb mongodb-query


【解决方案1】:

发生这种情况是因为 node-mongodb-native,当前“稳定”的 MongoDB 驱动程序,默默地包装并丢弃所有异常,包括从回调启动的任何内容,无论有多少范围。

https://groups.google.com/forum/#!topic/node-mongodb-native/AZewJaX4YuE

解决方法是使用不稳定的 1.3.18 系列 mongodb 包,直到 1.4(永久修复问题)稳定为止。

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2014-07-26
    相关资源
    最近更新 更多