我正在从MongoDB Node 文档中逐字复制一个示例(几乎从字面上看,MongoDB 的官方文档尚未更新以匹配使用 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
});
});
});
})
从其他阅读中,我听说如果连接断开或速度很慢,MongoDB 会将查询排队。但是 connect() 工作正常,我的数据库是 localhost 并且有 <2Kb 的文档。
我的问题是:
- 如何使收集方法起作用?
- 我在哪里可以了解查询将排队的情况?在我一直在查看的官方文档中,我似乎没有提到这一点。
编辑: 代码将在每个 URL 中运行一次。随后尝试使用相同的 URL 运行相同的代码将始终失败。更改 URL 将再次起作用,每个 URL 一次。