mongodb - 获取和修改数组子文档中的数组子文档
问题描述
我有以下架构,其中有一个数组子文档,其中有另一个数组子文档。如何访问或更新特定奖励的特定获胜者 ID 的声明属性?
const eventSchema = new Schema({
...
rewards: [{
name: { type: String }
winners: [{
id: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
claimed: { type: Bolean }
}]
}]
...
});
例如,在下面的文档中,如何在奖励数组中的单个奖励中访问获胜者数组中的单个获胜者。
{
_id: "5f61132da98bac2a98487d79",
rewards: [{
_id: "5f611378a98bac2a98487d7a",
name: "First Reward"
winners: [{
id: "5f611378a98bac2a98487d77",
claimed: false
}, {
id: "5f61132da98bac2a98487d44",
claimed: false
}, {
...
}]
}, {
....
}]
}
id: 5f611378a98bac2a98487d77
或者具体来说,对于具有奖励元素的获胜者元素,如何将声明状态更新为真实_id: 5f611378a98bac2a98487d7a
?
解决方案
您可以使用$[<identifier>]来执行此操作。就像是:
Model.updateOne(
{ _id: eventId },
{ $set: { "rewards.$[reward].winners.$[winner].claimed": true } },
{ arrayFilters: [ { 'reward._id': rewardId }, { 'winner.id': winnerId } ]}
)
推荐阅读
- python - 在 pyspark 的 StructStreaming 中;如何将 DataFrame 中的每一行(json 格式的字符串)转换为多列
- websocket - 如何将 Play Framework 2.8 WebSocket 与 Sink 和 Source 一起使用?
- javascript - 如何在字符串中呈现变量
React Native 中的 JSX 标签 - sql - SQL如何获取最新日期并在每次发生时更新(不使用MAX)
- node.js - .get 未定义(不在 v12 Discord.js 中)
- reactjs - Reactjs:提交表单后未显示对象
- deep-learning - 我们可以用步幅和下采样代替平均池化吗?
- python - 将数字重新映射到pygame中的另一个范围
- laravel - @nuxtjs/dotenv 中的相对路径
- java - 从 firebase 添加数据会导致无限循环