-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
안녕하세요 강의 잘 보고 있습니다 질문 하나 드립니다
21.12.22 01:19 작성 조회수 124
1
이번 강의 내용은 아니지만 여러가지 해보다가 궁금해서 질문 드립니다
혹시 모델안에 배열이 있을 경우 배열안에 특정 id를 검색해서 그것만 수정하는 방법이 있을까요 ?
배열안에 추가는 $push와 삭제는 $pull로 잘 되는데...
수정하려고 보니 id 검색 후 배열 안의 객체 id를 또 검색해야 하는데 아무리 검색해봐도 방법을 모르겠네요 ㅠ..
지금 모델 구조는 이렇게 되어있구요
const UserSchema = new mongoose.Schema({
username: {
type: String,
required: true,
unique: true,
},
name: {
first: { type: String, required: true,},
last: { type: String, required: true, }
},
age: Number,
email: String,
array: [
{ name: { type: String } }
]
}, {
timestamps: true,
})
백엔드 코드는 이렇게 요청하고 있습니다
// test
app.post('/api/user/test/:userId', async(req, res) => {
try {
const { userId } = req.params;
const user = await User.findByIdAndUpdate(userId, {
$push: { array: { name: req.body.name } }
}, {new: true})
res.json(user)
} catch(err) {
console.log(err)
}
})
app.put('/api/user/test/:userId', async(req, res) => {
try {
const { userId } = req.params;
const user = await User.findOneAndUpdate(userId, {
// $pull: { //삭제
// array: { _id: '61c1f85f11fb31321cc79973' }
// }
}, { new: true })
res.json(user)
} catch(err) {
console.log(err)
}
})
위에 코드는 삭제 코드인데 ..삭제는 조건만 적으면 되니 해당 아이디를 찾아서 pull이 됩니다
아이디를 찾아서 array안에 name 을 수정하고 싶은데 혹시 어떻게 해야 될까요 ?
답변을 작성해보세요.
1
김시훈
지식공유자2021.12.22
User.findOneAndUpdate({_id: userId, "array.name":"old_name"}, { "array.$.name":"new_name"}, { new: true})
이렇게 하시면 됩니다! "array.name":"old_name" 이 부분이 array 배열 안에 있는index를 탐색하는거에요. 두번째에서 $가 탐색된 index의 element를 가리키는거고요. 만약 탐색을 여러조건으로 하고 싶으시면 elementMatch였나 이걸로 하면 되요. 강의에서 다루는 부분이니 찾아보시면 될거 같아요!
답변 1