2017-09-08 4 views
0

업데이트되지 않습니다) (저장 : nodejs에 의해 호출몽구스 모델 'I는 다음과 같이 정의 된 몽구스 모델의 배열 (<code>bookedby</code>)가 빈 배열

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

    var BarSchema = new Schema({ 
     date: { 
     type: Date, 
     required: true 
     }, 
     barid: { 
     type: String, 
     required: true 
     }, 
     bookedby: { 
     type: [String], 
     required: true 
     }, 
    }); 

    module.exports = mongoose.model('Bar', BarSchema); 

나는 다음과 같은 기능을 업데이트를 라우터를 표현 :

const Bars = require("../../models/bars"); 
const { getToday } = require('../../utils'); 

module.exports = function(req, res) { 
    const { barid } = req.body; 
    const { username } = req.user; 
    const date = getToday(); 

    if(!barid) return res.json({ success: false, error: 'Please specify parameter \'barid\'.'}) 

    Bars.findOne({ barid, date }, function (err, bar) { 
    if (err) return next(err); 

    if (!bar || bar.bookedby.indexOf(username) === -1) return res.json({ error: `Bar is not booked yet.` }); 

    // Someone booked the bar 
    const index = bar.bookedby.indexOf(username); 
    bar.bookedby.splice(index, 1); 
    bar.save(err => { 
     if (err) res.json({ error: `Error saving booking.` }); 
     else res.json({ success: true }); 
    }); 
    }); 
}; 

모든 내가 bookedby 배열에서 마지막 항목을 제거하는 경우를 제외하고 잘 작동합니다. 그런 다음 save() 함수는 데이터베이스를 업데이트하지 않습니다. 마지막 항목은 그대로 남아 있습니다. 나는 mongodb와 빈 배열을 최적화하는 것과 관련이 있다고 생각하지만 어떻게 해결할 수 있습니까?

답변

0

몽구스 자주 묻는 질문에 따르면 버전에 대한 http://mongoosejs.com/docs/faq.html

> = 당신이 array.set() 구문을 사용한다 3.2.0 :

doc.array.set(3, 'changed'); 
doc.save(); 

당신이 버전을 실행하는 경우를 3.2 미만 .0을 저장하기 전에 수정 된 배열을 표시해야합니다.

doc.array[3] = 'changed'; 
doc.markModified('array'); 
doc.save(); 
+0

나는 그것을 시도했지만 저를 위해 작동하지 않았습니다. Bars.findOneAndUpdate ({barid, date}, {$ pull : {bookedby : username}}). 그리고 $ pull 대신 $ push를 추가합니다. 매력처럼 작동하십시오. 나는 MongoDB를 좋아하기 시작했다. – Michael