不确定如何解释MongoDB node.js的驱动程序callback参数对于collection.insert

这是我的电话:

SomeCollection.insert(Inserts, {'w': 1, 'keepGoing': true}, function(Err, Result) { //Callback logic goes here }); 

现在,我猜测

  • 在没有任何文档被插入(成功)的情况下:Err被定义并且Result为空?
  • 在所有文档都被插入(失败)的情况下:Err为空,Result是包含所有插入文档的数组?
  • 在插入某些文件和插入失败(部分成功)的情况下:

我发现API( http://mongodb.github.io/node-mongodb-native/1.4/api-generated/collection.html#insert )在这个问题上是完全模糊的。

我可能需要运行一些testing和/或查看源代码,以便稍后发布答案,除非有人知道:)…

想想这样:Err只能是null或JavaScript错误对象的实例。 “部分成功”意味着至less发生了一个错误,因此该方法将返回一个错误,您需要在callback中处理该错误。 错误的“消息”属性通常会告诉你你需要知道什么。

根据我的经验,node.js库的大多数文档都是模糊的(有时不存在)。 在开发过程中阅读源代码甚至只是将结果打印到控制台是非常必要的。

查看这个博客文章 ,了解更多关于error handling的信息。

希望这可以帮助。

我编写并运行了这个脚本:

 var MongoDB = require('mongodb'); MongoDB.MongoClient.connect("mongodb://localhost:27017/test", {native_parser:true}, function(Err, DB) { DB.createCollection('TestCollectionInsertCallback', function(Err, TestCollection) { TestCollection.ensureIndex({'UniqueIndex': 1}, {'w': 1, 'unique': true}, function(Err, Index) { TestCollection.insert([{'UniqueIndex': 1}, {'UniqueIndex': 2}, {'UniqueIndex': 3}, {'UniqueIndex': 6}], {'w': 1, 'keepGoing': true}, function(Err, Result) { console.log('\nSuccessful Inserts Args...'); console.log('Err:'); console.log(Err); console.log('Result:'); console.log(Result); TestCollection.insert([{'UniqueIndex': 1}, {'UniqueIndex': 2}, {'UniqueIndex': 3}, {'UniqueIndex': 6}], {'w': 1, 'keepGoing': true}, function(Err, Result) { console.log('\nComplete Failure Inserts Args...'); console.log('Err:'); console.log(Err); console.log('Result:'); console.log(Result); TestCollection.insert([{'UniqueIndex': 4}, {'UniqueIndex': 5}, {'UniqueIndex': 6}, {'UniqueIndex': 7}], {'w': 1, 'keepGoing': true}, function(Err, Result) { console.log('\nPartial Success Inserts Args...'); console.log('Err:'); console.log(Err); console.log('Result:'); console.log(Result); TestCollection.find({}).toArray(function(Err, Results) { console.log('\nFinal DB content...'); Results.forEach(function(Item, Index, List) { console.log(Item); }); DB.dropCollection('TestCollectionInsertCallback', function(Err, Result) { DB.close(); }); }); }); }); }); }); }); }); 

输出是:

 Successful Inserts Args... Err: null Result: [ { UniqueIndex: 1, _id: 5446084afa57911715f18c4e }, { UniqueIndex: 2, _id: 5446084afa57911715f18c4f }, { UniqueIndex: 3, _id: 5446084afa57911715f18c50 }, { UniqueIndex: 6, _id: 5446084afa57911715f18c51 } ] Complete Failure Inserts Args... Err: { [MongoError: E11000 duplicate key error index: test.TestCollectionInsertCallback.$UniqueIndex_1 dup key: { : 6 }] name: 'MongoError', err: 'E11000 duplicate key error index: test.TestCollectionInsertCallback.$UniqueIndex_1 dup key: { : 6 }', code: 11000, n: 0, connectionId: 88, ok: 1 } Result: null Partial Success Inserts Args... Err: { [MongoError: E11000 duplicate key error index: test.TestCollectionInsertCallback.$UniqueIndex_1 dup key: { : 6 }] name: 'MongoError', err: 'E11000 duplicate key error index: test.TestCollectionInsertCallback.$UniqueIndex_1 dup key: { : 6 }', code: 11000, n: 0, connectionId: 90, ok: 1 } Result: null Final DB content... { UniqueIndex: 1, _id: 5446084afa57911715f18c4e } { UniqueIndex: 2, _id: 5446084afa57911715f18c4f } { UniqueIndex: 3, _id: 5446084afa57911715f18c50 } { UniqueIndex: 6, _id: 5446084afa57911715f18c51 } { UniqueIndex: 4, _id: 5446084afa57911715f18c56 } { UniqueIndex: 5, _id: 5446084afa57911715f18c57 } { UniqueIndex: 7, _id: 5446084afa57911715f18c59 } 

所以,对问题中提供的案例的答案是:

  • 100%成功:Err为空,结果包含插入的条目
  • 100%失败:Err是表示错误的对象,Result为null
  • 部分成功:callback参数与100%失败相同