2015-09-24 4 views
2

Я пытаюсь изменить документ в Mongoose, но изменения, похоже, не сохраняются. Сама функция определенно вызывается, а ошибка равна нулю каждый раз. Регистрация изменений, сделанных до и после ввода идентификатора в массив, показывает, что он был добавлен, но он не сохраняется.Функция сохранения Mongoose не сохраняет изменения

function(req, res) { 
    var id = req.user._id; 
    Moment.findOne({ _id: req.body.moment._id }, function (err, moment) { 
    moment.comments[req.body.index].likes.push(id); 
    moment.save(function(err) { 
     console.log('saved'); 
     if (err) console.log(err); 
     res.json(moment); 
     }); 
    } 
    }) 
}; 

Схема

var MomentSchema = new Schema({ 
    name: { 
    type: String, 
    trim: true, 
    default: '', 
    required: true 
    }, 
    username: { 
    type: String, 
    required: true 
    }, 
    startTime: { 
    type: Date, 
    trim: true, 
    required: true 
    }, 
    endTime: { 
    type: Date, 
    trim: true, 
    required: true 
    }, 
    comments: { 
    type: Array 
    } 
}); 
+0

Этот код не работает сам по себе, хотя ... –

+0

Вы пытались сравнить момент после завершения сохранения? например time.save (function (err, newdoc) {console.log (newdoc.toObject()}), чтобы увидеть, как он выглядит после сохранения? Это может быть его сохранение, но игнорирование ваших добавлений, потому что ваша схема слишком строгая – chriskelly

+0

Done, @ JohnnyHK. – Tillson

ответ

0

Ваш запрос неправильно. Вы должны создать Mongo ObjectId из данного идентификатора. Попробуйте

var ObjectId = require('mongoose').Types.ObjectId; 

Moment.findOne({_id: new ObjectId(req.body.moment._id)}, function(err, moment) .... 

В запросе MongoDB не найден документ, соответствующий вашему запросу. Это не вызовет ошибку, но вы получите пустой объект.

+0

в соответствии с запросом. Он говорит, что проверяет до и после нажатия на массив, поэтому он должен вернуть объект. – chriskelly

+0

Запрос верный. Как сказал @chriskelly, я смог получить предполагаемый объект. единственная вещь, которая не работает, - это последняя функция сохранения. – Tillson

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