[英]Error when using Mongoose ArrayFilters to update nested subdocument
我有一個 Mongoose 集合,我想更新它的嵌套子文檔。
基本設置是這樣的:
我希望能夠找到一個孫子並更新它。 我的方法是找到包含孫子的父級(Map),然后更新它。
這些是我的簡化模式:
const phaseSchema = new mongoose.Schema(
{
name: String,
color: String,
steps: [
new mongoose.Schema(
{
name: String,
body: String,
entry: {
type: mongoose.SchemaTypes.ObjectId,
ref: 'entry',
default: null
}
},
{ timestamps: false }
)
]
},
{ timestamps: false, _id: true }
)
const mapSchema = new mongoose.Schema(
{
name: String,
phases: [phaseSchema]
},
{ timestamps: false }
)
export const Map = mongoose.model('map', mapSchema)
我正在嘗試使用 ArrayFilters 來查找和更新子文檔,但沒有運氣:
req.body = {
map_id: 'some_mongoose_id',
step_id: 'some_other_mongoose_id'
}
const newEntryId = 'a_new_mongoose_id'
// Find the parent (Map) and update it
const UpdatedMap = await Map.update(
{ _id: req.body.map_id },
{
$set: {
'phases.$[i].steps.$[j].entry': mongoose.Types.ObjectId(newEntryId)
}
},
{
arrayFilters: [
{
'i.steps._id': mongoose.Types.ObjectId(req.body.step_id)
},
{
'j._id:': mongoose.Types.ObjectId(req.body.step_id)
}
]
}
)
這會引發以下錯誤:
錯誤:在架構中找不到路徑“phases.0.steps.0._id:”
巧合的是,我嘗試更新的階段和步驟都在索引 0 處。
如果我換出 arrayFilters 並對索引進行硬編碼,例如$set: {'phases.0.steps.0.entry': mongoose.Types.ObjectId(newEntryId)'}
,它就可以工作。
我究竟做錯了什么?
i
是導致錯誤的原因,它也是多余的。 沒有它,嵌套的 arrayFilter 將按需要工作。
const UpdatedMap = await Map.update(
{ _id: req.body.map_id },
{
$set: {
'phases.steps.$[j].entry': mongoose.Types.ObjectId(newEntryId)
}
},
{
arrayFilters: [
{
'j._id:': mongoose.Types.ObjectId(req.body.step_id)
}
]
}
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.