我正在尝试更新一个位于文档中另一个数组内的数组。架构是这样的:
const projectSchema = new mongoose.Schema({
stakeholders: [{
stakeholderTitle: {
type: String,
},
...
subgroup: [{
subgroupTitle: {
type: String
},
subgroupPercent: {
type: Number,
}
}]
}],
,我正在尝试更新“子组”数组。我已经使用位置查询this的答案,使用位置$运算符在其父级(利益相关者数组)上进行了查询。所以我的查询看起来像这样.....
await db.findOneAndUpdate({ find by the id }, { "stakeholders.$.stakeholderTitle": req.body.stakeholderTitle, ... "stakeholders.$.subgroup": req.body.subgroup })
但是,此查询不适用于“利益相关者子组”数组,并将其设置为null。浏览mongo docs中的位置运算符时,它指出“位置$运算符不能用于遍历一个以上数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$占位符的替换是一个值”,我想这可能是我的问题。
那么我该如何使用findOneAndUpdate查询呢?
答案 0 :(得分:1)
根据我所看到的,您必须在子组数组中指定要更新的对象。试试这个-(即我正在更新子组数组的subgroupTitle);
await db.findOneAndUpdate(
{
_id: userId,
"stakeholders.stakeholderTitle": req.body.stakeholderTitle,
"stakeholders.stakeholderTitle.subgroup.subgroupTitle": req.body.subgroupTitle
},
{$set: {
"stakeholders.stakeholderTitle.subgroup.$.subgroupPercent": somePercentValue,
}
},
);
还请注意,只有发现的阵列可以更新。它可能并不是您想要的,但是更近了