不确定如何解释MongoDB node.js';collection.insert的驱动程序回调参数

不确定如何解释MongoDB node.js';collection.insert的驱动程序回调参数,node.js,mongodb,Node.js,Mongodb,这是我的电话: SomeCollection.insert(Inserts, {'w': 1, 'keepGoing': true}, function(Err, Result) { //Callback logic goes here }); 现在,我猜: 在没有插入任何文档的情况下(成功):定义了Err,结果为null 在插入所有文档的情况下(失败):Err为null,结果是包含所有插入文档的数组 如果插入的某些文档和某些插入失败(部分成功): 我发现API()在这个问题上完全

这是我的电话:

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

  • 在没有插入任何文档的情况下(成功):定义了Err,结果为null
  • 在插入所有文档的情况下(失败):Err为null,结果是包含所有插入文档的数组
  • 如果插入的某些文档和某些插入失败(部分成功):
我发现API()在这个问题上完全含糊不清


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

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

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

有关节点中错误处理的详细信息,请查看


希望这有帮助。

我编写并运行了以下脚本:

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%成功:错误为空,结果包含插入的条目
  • 100%失败:Err是表示错误的对象,结果为空
  • 部分成功:回调参数与100%失败相同

这正是我所担心的。谢谢你的反馈。最后写了一个测试脚本,可以在我的答案中找到。