是否有任何情况,当col.insert没有发送任何错误但文件没有被插入?

时间:2014-01-05 09:12:56

标签: node.js mongodb

我经常看到以下代码段:

collection.insert({"some": "data"}, function (err, inserted) {
   if (err) { /* do something */ return; }
   if (!inserted || !inserted.length) {
       console.error("Nothing inserted ...");
       return;
   }
   /* do something */
});

真的需要第二个if吗?

insert方法未在回调中发送errinserted变量为undefinednull或类似内容时?

2 个答案:

答案 0 :(得分:2)

传递给insert 回调的第二个参数可以nullerr也是null),根据{ {3}},当您使用MongoDB 2.6(或更高版本)时,写入问题为0并且传递了回调函数。

我没有运行2.6,所以无法自己测试:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/demo?w=0', function(err, db) {
  db.collection('test').insert({ foo : 'bar' }, function(err, inserted) {
    console.log('I', inserted);
  });
});

但是,inserted在这种情况下不是数组,而是null。所以检查必须是if (! inserted) { ... },这不会是一个错误(将写入关注设置为0意味着你只是不想知道插入是否失败)。

答案 1 :(得分:0)

if回调我们不需要第二个insert()。但我们可能需要第二次if进行update()回调。

我认为该代码的作者将insert()update()(?)

混为一谈

插入 document link

collection.insert({"some": "data"}, {safe: true}, function(err, records){
  if (err) throw err;
  console.log(records);
});

附注:根据文档,我们必须通过{safe:true}才能获得err param中的callback,因为它默认为false。但我觉得默认情况下true对我来说(包括制作模式)

更新 document link

collection.update({"some": "data"}, function (err, count) {
    if(err) throw err;

    // SECOND IF        
    if(!count) {
        console.log('NOTHING UPDATED');
    }
});