반응형
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
반응형
'programing' 카테고리의 다른 글
openxlsx 오류: 행과 콜의 길이가 같아야 합니다. (0) | 2023.06.23 |
---|---|
Node/Express 응용 프로그램에서 MySQL 연결이 누출되는 이유는 무엇입니까? (0) | 2023.06.18 |
OpenXML을 사용하여 Excel 시트에서 탭 이름을 검색하는 방법 (0) | 2023.06.18 |
*.so 파일에서 기능하도록 기능 주소를 매핑하는 방법 (0) | 2023.06.18 |
j선택한 값 가져오기 라디오 버튼 쿼리 (0) | 2023.06.18 |