插入查询执行操作的回调函数内部

时间:2013-05-16 14:49:51

标签: node.js mongodb node-mongodb-native

db.createCollection("category",function(errDb,collection){
    collection.findOne({name:"test"},function(err,value){
        if(value == null)
        {
            collection.insert({name:"test"})
        }
    })
})

错误:如果没有提供的回调,则无法使用writeConcern

1 个答案:

答案 0 :(得分:0)

当您创建与数据库的连接时,您必须提供writeCon函数的回调,因为您有writeConcern 1(默认值)。你的代码应该是这样的:

db.createCollection("category",function(errDb,collection){
    collection.findOne({name:"test"},function(err,value){
        if(value == null)
        {
            collection.insert({name:"test"}, function(err, docs){
                if (err) //do anything you want to do when there is an error
                // Here you write code for what you would do when the documents were sucessfully       inserted into the collection

            });
        }
    })
})

但是如果您不希望激活写入问题并且只想使用您在创建连接时所执行的功能进行插入,则必须像这样连接。

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

MongoClient.connect("mongodb://localhost:27017/integration_test_?", {
    db: {
      w : o
    }
  }, function(err, db) {
  test.equal(null, err);
  test.ok(db != null);

// Do anything like you were doing here
}

这里我将writeConcern设置为0.这可以防止mongo.db确认插入或更新是否成功。所以现在你可以使用collection.insert({name:"test"});

请注意使用w:0时要小心,因为您不希望将其用于您希望确定插入或更新的数据,因为写入失败可能会丢失一些数据。< / p>