Вставлен внутри функции обратного вызова действия выполнения запроса

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

Ошибка: невозможно использовать writeConcern без предоставленного обратного вызова


person Xingjia Luo    schedule 16.05.2013    source источник
comment
возможный дубликат Ошибка при вставке документа в MongoDB через узел .js   -  person JohnnyHK    schedule 16.05.2013
comment
Отсутствие функции обратного звонка. .   -  person Xingjia Luo    schedule 16.05.2013
comment
Как показывает дубликат, вам нужно предоставить функцию обратного вызова. Ваш вызов insert не использует обратный вызов.   -  person WiredPrairie    schedule 16.05.2013


Ответы (1)


Вам нужно будет предоставить обратный вызов функциям записи, поскольку у вас есть 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, так как вы не хотели бы использовать его для данных, которые вы хотите убедиться в вставке или обновлении, поскольку вы можете потерять некоторые данные из-за неудачной записи.

person Saransh Mohapatra    schedule 22.08.2013