programing

Mongoose의 배열 스키마로 개체 밀어넣기

oldcodes 2023. 6. 18. 16:18
반응형

Mongoose의 배열 스키마로 개체 밀어넣기

몽구스 스키마가 있습니다.

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);

    });
  });

나는 선언하지 않을 것입니다.messages물건들의 배열을 가져오는 것?
오류: MongoError: $push/$pushAll 수식어를 비 어레이에 적용할 수 없습니다.

아이디어 있어요?

몽구스는 한 번의 수술로 이것을 해줍니다.

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

최근 mogoose find by id and update에서는 "new : true" 옵션 매개 변수를 추가해야 합니다.그렇지 않으면 이전 문서가 반환됩니다.따라서 Mongoose 버전 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);
        }
    );

어레이에서 데이터를 푸시하는 두 가지 방법이 있습니다.

첫 번째 방법:

let newMessage = {title: "new title", msg: "new Message"}
let result = await Contact.findById(id);
result.messages.push(newMessage);
await result.save();

제2의 방법

let result = await Contact.findByIdAndUpdate(
        id,
        {$push: {"messages": {title: title, msg: msg}}},
        {upsert: true, new : true})

언급URL : https://stackoverflow.com/questions/15621970/pushing-object-into-array-schema-in-mongoose

반응형