这是我的电话:
SomeCollection.insert(Inserts, {'w': 1, 'keepGoing': true}, function(Err, Result) {
//Callback logic goes here
});
现在,我猜测:
- 如果没有插入任何文档(成功):定义了 Err 并且 Result 为 null?
- 如果所有文档都被插入(失败):Err 为 null 并且 Result 是包含所有插入文档的数组?
- 如果某些文档已插入且某些插入失败(部分成功):?
我发现 API ( http://mongodb.github.io/node-mongodb-native/1.4/api-generated/collection.html#insert ) 在这个问题上非常模糊。
我可能需要运行一些测试和/或查看源代码,以便稍后发布答案,除非有人知道:)...
最佳答案
我编写并运行了这个脚本:
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
- 部分成功:回调参数与 100% 失败相同
关于node.js - 不确定如何解释 Collection.insert 的 MongoDB Node.js 驱动程序回调参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26473165/