2013-09-02 2 views
6

Я пытаюсь обновить массив в mongoDB из программы node.js. Я могу изменить массив из node.js, но я не могу получить изменения для сохранения.Как обновить документ mongodb от node.js?

http://pastebin.com/j0Mnf7jP

Я думаю, что я делаю что-то очень неправильно. помощь будет оценена ...

+0

Вы можете сделать это только из раковины манго. –

ответ

8

Изменить эту строку:

({_id:doc._id},$set:{scores:zz}); 

To:

({_id:doc._id}, { $set:{scores:zz}}); 

Это также, вероятно, быть обернут обратного вызова, чтобы поймать ошибки:

db.schools.update({_id:doc._id}, {$set:{scores:zz}}, function(err, result) { 
    if (err) 
     //do something. 
}); 
+0

Я сделал это ... Но я получаю эту ошибку ... TypeError: невозможно вызвать метод 'update' undefined – IrishGringo

+0

@IrishGringo - звучит так, как ваши 'db' или' school' не определены. – tymeJV

+0

использовать db.collection ('students') вместо db.schools – refactor

0

Я думаю, что вы должны сделать следующий код для решения вопросов

var lowScore = 9999.9; 
     for (var i=0; i<doc.scores.length; i++) { 
      if (doc.scores[i].type == "homework" 
       && doc.scores[i].score < lowScore) { 
        lowScore = doc.scores[i].score; 
      } 
     } 

, а затем обновить свою коллекцию, используя следующий запрос

collection.update({ "_id":doc._id }, 
{ $pull : { "scores" : { 
$and: [ {"type":"homework"}, { "score":lowScore} ] 
} } }, 
{ "safe":true }, 
function(err, result) { 
if (err) { 
console.log(err); 
    } 
} // update callback 
); 

для получения дополнительной информации вы можете обратиться here

3

Я знаю, что это немного поздно, чтобы помочь вам сейчас, но, возможно, другие могут воспользоваться, как новые когорты проходят через Университет МонгоДБ!

db.schools.update следует читать db.students.update.

@ ответ tymeJV дает остаток:

  • Оберните $set внутри фигурных скобок: {$set:{scores:zz}}
  • Добавить функцию обратного вызова, чтобы поймать ошибки:

    db.collection('students').update (
        { _id : doc._id }, 
        { $set : { scores:zz } }, 
        function(err, result) { 
         if (err) throw err; 
        } 
    ); 
    

Как ни странно, я Фактически я выполняю то же самое задание прямо сейчас! У меня была другая проблема, на которую был дан ответ, прочитав документы, но я видел этот вопрос, когда искал его. Надеюсь, я помог кому-то!

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