2015-11-23 5 views
0

Я пытаюсь обновить несколько документов с помощью мангуста (3.8.37), но ни один документ не обновляется.Ошибка обновления нескольких документов с помощью мангуста

Я сделал все, что я узнал от других вопросов (см):

  • Используйте функцию обратного вызова
  • Укажите мульти: истинный

Мой оператор обновления :

Animal.where({ type: type}).update({deleted:1}, { multi: true, overwrite: true }, function (err,doc) { 
     console.log("updates: "+doc); 
    }); 

обновления: 0

Когда я просто пересчитываю документы, я получу результат. => Запрос является правильным

Animal.where({type: type}).count(function (err,doc) { 
     console.log("count: "+doc); 
    }); 

Количество: 299

Когда я опускаю несколько: истинный параметр, первая запись обновляются. => Оператор обновления является правильным, слишком

Animal.where({ type: type}).update({deleted:-1}, function (err,doc) { 
     console.log("updates: "+doc); 
    }); 

обновления: 1

Так где ошибка?

Существует несколько вопросов, касающихся этой темы. К сожалению, ни одна из них не решает мою проблему.

** UPDATE

added a log callback Я и обнаружил, что ни один из запросов к MongoDB не выполняется до тех пор, как опции (несколько: true).

+0

Попробуйте изменить '.update ({deleted: 1}, ...' to '.update ({$ set: {deleted: 1}}, {multi: true}, function ...' – Molda

+0

@Molda Спасибо за но я уже пробовал это. Не помогло. –

ответ

1

У меня есть установки небольшой пример, который работает, как и ожидалось, первый я под названием start() создать несколько пользователей, то update()

var mongoose = require('mongoose'); //v4.2.7 

var userSchema = mongoose.Schema({ 
    deleted: Number, 
    name: String 
}); 

var User = mongoose.model('user', userSchema); 

mongoose.connect('mongodb://127.0.0.1:27017/user'); 

//start(); 

function start(){ 

    for (var i = 0; i < 5; i++) { 
     var user = new User({ 
      deleted: 1, 
      name: i 
     }); 
     user.save(); 
     console.log('user ---> ', user);  
    }; 

    User.find({}, function(err, docs){ 
     console.log('found ---> ', err, docs); 
    }); 

} 

update(); 

function update(){ 
    User.update({deleted:1}, {$set: {deleted: 0}}, {multi:true}, function(err, numAffected){ 
     console.log('updated ---> ', err, numAffected); 
    }); 
} 

Я не уверен, почему обновление не работает с where(...)

function update(){ 
    // this doesn't work 
    User.where({deleted:1}).update({$set: {deleted: 0}}, {multi:true}, function(err, numAffected){ 
     console.log('updated ---> ', err, numAffected); 
    }); 
} 
+0

Great! Works: User.where(). update() Не работает: User.where(). update (multi: true) => Вывод: всегда используйте User.update(), как предлагает Molda! –

Смежные вопросы