2014-09-18 3 views
3

я следующая схема разработана и вставка работает отличноОбновления коллекции Монго использования Mongoose findOneAndUpdate

{ 
    "uid" : "541a5edaef7b20086c2c9ea0", 
    "_id" : ObjectId("541a6bca735a20060c593813"), 
    "exams" : [ 
     { 
      "start_time" : "2014-09-18T05:21:14.219Z", 
      "status" : "passed", 
      "chapter_id" : ObjectId("54194290022f6d830f255f2e") 
     }, 
     { 
      "start_time" : "2014-09-18T05:26:14.219Z", 
      "status" : "attending", 
      "chapter_id" : ObjectId("54194290022f6d830f255f2f") 
     } 
    ], 
    "__v" : 0 
} 

Как я могу обновить второй элемент экзаменов ключа, так что результат будет

{ 
     "uid" : "541a5edaef7b20086c2c9ea0", 
     "_id" : ObjectId("541a6bca735a20060c593813"), 
     "exams" : [ 
      { 
       "start_time" : "2014-09-18T05:21:14.219Z", 
       "status" : "passed", 
       "chapter_id" : ObjectId("54194290022f6d830f255f2e") 
      }, 
      { 
       "start_time" : "2014-09-18T05:26:14.219Z", 
       **"status" : "failed",** 
       "chapter_id" : ObjectId("54194290022f6d830f255f2f") 
      } 
     ], 
     "__v" : 0 
    } 

Моя модель определяется следующим образом

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var examSchema = new Schema({ 
    uid: String, 
    exams: [] 
}); 
module.exports = mongoose.model('Exam',examSchema); 

Я пробовал этот запрос для обновления, но получает ошибку, например

Exam.findOneAndUpdate({ _id:uid, exams.chapter_id: chapterId }, { exams.status:'passed}) 
             ^
SyntaxError: Unexpected token 

.

ответ

3

Найден способ. Поскольку мой subdoc подал «chapter_id» является MongoDB ObjectID нам нужно передать ему что-то вроде

var ObjectId = require('mongoose').Types.ObjectId; 
Exam.findOneAndUpdate({ _id: id, exams:{$elemMatch:{'chapter_id': new ObjectId(chapterId)}}}, { 'exams.$.status' : passStatus }, function(err,doc) { 
    res.send(doc); 
    }); 

Благодарности John Greenall

3

Я думаю, вам нужно заключить в кавычки exams.chapter_id:

"exams.chapter_id" 
+0

Спасибо, что делает ошибки исчезают, но никаких изменений в БД. – BluezTechz

+0

@BluezTechz вы читали о позиционном операторе? http://docs.mongodb.org/manual/reference/operator/update/positional/ Пример в конце этой страницы по существу идентичен вашему варианту использования –

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