如何更新具有嵌入文档的猫鼬数组中的许多元素

Posted

技术标签:

【中文标题】如何更新具有嵌入文档的猫鼬数组中的许多元素【英文标题】:How to Update many elements in mongoose array which has embedded documents 【发布时间】:2022-01-17 10:34:52 【问题描述】:

我有这个猫鼬模型

resourceId: 
    type: String,
,

resourceName: 
    type: String,
,

dateAndValue: [
    
        date:  type: Date ,
        value:  type: Number ,
    ,
],

project: 
    type: mongoose.Schema.Types.ObjectId,
    ref: 'project',
,

我想将 dateAndValue 数组元素的所有值字段更新为给定资源 ID、给定日期范围内的给定项目的“0”!

await QuantumResourcesManpowerAdmin.updateMany(
    
        project,
        resourceId,
        'dateAndValue.date':  $gte: startDate, $lte: endDate ,
    ,
    
        $set: 
            'dateAndValue.$.value': 0,
        ,
    ,
     upsert: true 
);
res.status(200).json( success: true );

这是我使用的代码。它返回成功但不进行任何更新。 所有输入都是正确的,只有 updateMany 查询有问题,所有其他功能都有效!

【问题讨论】:

【参考方案1】:
await QuantumResourcesManpowerAdmin.updateMany(
    
        project,
        resourceId,
        'dateAndValue.date':  $gte: startDate, $lte: endDate ,
    ,
    
        $set: 
            'dateAndValue.$[element].value': 0,
        ,
    ,
 arrayFilters:['element.date':$gte: startDate, $lte: endDate ] ,upsert: true 
);
res.status(200).json( success: true );

【讨论】:

'dateAndValue.$[ ].value':0 这段代码更新了整个数组,但我只想在给定的日期范围内更新

以上是关于如何更新具有嵌入文档的猫鼬数组中的许多元素的主要内容,如果未能解决你的问题,请参考以下文章

嵌入式文档的猫鼬更新

构建我的猫鼬模式的最佳方式:嵌入式数组、填充、子文档?

MongoDB(Mongoose)更新数组数组中的元素

如何使用猫鼬更新子文档数组中的特定元素? [复制]

数组中的猫鼬查询,用于检索从索引 0 到 n 开始的元素,其中 n 是从最后一个元素开始的位置

如何使用嵌套子文档制作数组的猫鼬模式