복붙노트

[MONGODB] 몽구스의 배열 스키마로 개체를 추진

MONGODB

몽구스의 배열 스키마로 개체를 추진

나는이 몽구스 스키마를

var mongoose = require('mongoose');

var ContactSchema = module.exports = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  phone: {
    type: Number,
    required: true,
    index: {unique: true}
  },
  messages: [
  {
    title: {type: String, required: true},
    msg: {type: String, required: true}
  }]
}, {
    collection: 'contacts',
    safe: true
});

이 작업을 수행하여 모델을 업데이트하려고 :

Contact.findById(id, function(err, info) {
    if (err) return res.send("contact create error: " + err);

    // add the message to the contacts messages
    Contact.update({_id: info._id}, {$push: {"messages": {title: title, msg: msg}}}, function(err, numAffected, rawResponse) {
      if (err) return res.send("contact addMsg error: " + err);
      console.log('The number of updated documents was %d', numAffected);
      console.log('The raw response from Mongo was ', rawResponse);

    });
  });

나는 개체의 배열을 취하도록 메시지를 선언 아니에요? ERROR : MongoError는 : 비 배열에 $ 푸시 / $ pushAll 수정을 적용 할 수 없습니다

어떤 아이디어?

해결법

  1. ==============================

    1.몽구스는 한 번의 작업으로 당신을 위해이 작업을 수행합니다.

    몽구스는 한 번의 작업으로 당신을 위해이 작업을 수행합니다.

    Contact.findByIdAndUpdate(
        info._id,
        {$push: {"messages": {title: title, msg: msg}}},
        {safe: true, upsert: true},
        function(err, model) {
            console.log(err);
        }
    );
    

    이 방법을 사용하여 스키마의 "사전"기능을 활용할 수 없다는 점을 명심하시기 바랍니다.

    http://mongoosejs.com/docs/middleware.html

    옵션 PARAM 그것에 추가 : 최신 mogoose findbyidandupdate 요구 같이 "진정한 새가"이 있습니다. 그렇지 않으면 당신은 당신에게 반환 된 문서를 얻을 것이다. 몽구스 버전 4.x.x의 변환에 대한 따라서 업데이트 :

    Contact.findByIdAndUpdate(
            info._id,
            {$push: {"messages": {title: title, msg: msg}}},
            {safe: true, upsert: true, new : true},
            function(err, model) {
                console.log(err);
            }
        );
    
  2. from https://stackoverflow.com/questions/15621970/pushing-object-into-array-schema-in-mongoose by cc-by-sa and MIT license