我的 mongo 架構看起來像這樣,我想更新一個flashcard位于也位于主題陣列中的抽認卡陣列中的物件。
const classrooms = new mongoose.Schema({
name: String,
year: String,
student: [
{
firstname: String,
lastname: String,
mail: String,
userId: String,
}
],
subject: [
{
subjectId: String,
flashcard: [
{
title: String,
tag: []
}
]
}
]
});
我正在做的是
const flashcard = await classroomModel.findOneAndUpdate({
_id : classroomId,
"subject" : {
"subjectId" : subjectId,
"subject.flashcard" : {
"_id" : flashcardId
}
},
"$set" : {
"flashcard.title" : "new title"
}
})
但這是洗掉位于物件內的所有抽認卡。任何幫助,將不勝感激。
uj5u.com熱心網友回復:
你需要arrayFilters指定(待更新)flashcard檔案符合標準subject和flashcard。
db.collection.update({
_id: 1//classroomId,
},
{
"$set": {
"subject.$[subject].flashcard.$[flashcard].title": "new title"
}
},
{
arrayFilters: [
{
"subject.subjectId": 1//subjectId
},
{
"flashcard._id": 1//flashcardId
}
]
})
示例 Mongo Playground
uj5u.com熱心網友回復:
盡管我接受了@yong shun這是最好的方法,但如果您不喜歡 mongoose 語法,還有另一種方法:
const classroom = await classroomModel.findOne(
{
_id: 1 //classroomId,
},
)
const subject = classroom.subject.find(
(currentSubject: any) => {
return currentSubject.subjectId == 1 //subjectId
}
)
const flashcard = subject.flashcard.find(
(currentFlashcard: any) => {
return currentFlashcard._id == 1 //flashcardId
}
)
flashcard.title = "my new title";
await classroomModel.updateOne(classroom);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/347635.html
標籤:javascript MongoDB 表达 猫鼬
