[英]Update an array in a sub-document - mongoose mongodb
假設我有一個這樣創建的模型:
const attendance = mongoose.Schema({
studentName: {type: String, required: true},
status: {type: Number, required: true}
});
const session = mongoose.Schema({
sessionName: {type: String, required: true},
attendances: {type: [attendance]}
});
const subjectSchema = mongoose.Schema({
name: {type: String, required: true},
faculty_ID: {type: String, required: true},
students: {type: [String]},
sessions: {type:[session]}
});
module.exports = mongoose.model('Subject', subjectSchema);
樣本文件如下所示:
{
students: [
"Student1",
"Student2",
"Student3"
],
_id: "5bd5a6f49097cd505cf6317a",
name: "subjectName",
faculty_ID: "5bd57383bbe10f4f6439ae43",
sessions: [
{
attendances: [ ],
_id: "5bd6c4de95ffe03480ee8796",
sessionName: "Session1"
},
{
attendances: [ ],
_id: "5bd7a9d2604b760004947833",
sessionName: "Session2"
},
{
attendances: [ ],
_id: "5bd7a9e4604b760004947834",
sessionName: "Session3"
}
]
}
在會話內的出席者數組之一中推送新元素的最佳方法是什么?
就像我想推這個:
{
studentName: "Student1",
status: "Present"
}
插入到具有sessionName: "Session1"
的對象的出席者數組中,這樣文檔將如下所示:
{
students: [
"Student1",
"Student2",
"Student3"
],
_id: "5bd5a6f49097cd505cf6317a",
name: "subjectName",
faculty_ID: "5bd57383bbe10f4f6439ae43",
sessions: [
{
attendances: [
{
studentName: "Student1",
status: "Present"
}
],
_id: "5bd6c4de95ffe03480ee8796",
sessionName: "Session1"
},
{
attendances: [ ],
_id: "5bd7a9d2604b760004947833",
sessionName: "Session2"
},
{
attendances: [ ],
_id: "5bd7a9e4604b760004947834",
sessionName: "Session3"
}
]
}
另外,如果我已經成功地將新元素推入該數組,那么如何刪除該數組上的特定元素?
您可以使用$位置運算符來指示應修改的session
。 嘗試:
Model.updateOne({ _id: "5bd5a6f49097cd505cf6317a", "sessions._id": "5bd6c4de95ffe03480ee8796" },
{ $push: { "sessions.$.attendances": { studentName: "Student1", status: "Present" } } })
要刪除該值,您需要使用相同的運算符和$ pull (以condition為參數),例如:
Model.updateOne({ _id: "5bd5a6f49097cd505cf6317a", "sessions._id": "5bd6c4de95ffe03480ee8796" },
{ $pull: { "sessions.$.attendances": { studentName: "Student1" } } })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.