猫鼬从多个文档中更新多个子文档

时间:2020-01-02 09:46:13

标签: mongodb mongoose nestjs

我想使用猫鼬从多个文档中更新多个子文档。

我当前的代码是:

const ids: any[] = payload.imageIds.map(e => new ObjectId(e));

await this.userModel
  .updateMany({ 'images._id': { $in: ids } }, { $inc: { 'images.$.views': 1 } })
  .exec();

部分架构是:

export const UserSchema = new mongoose.Schema(
{  
    images: [ImageSchema],
}

const ImageSchema = new mongoose.Schema(
{
    views: { type: Number, default: 0 },
},

但是此代码仅更新 ids arr中的最后一个元素。

1 个答案:

答案 0 :(得分:0)

已解决!

对于遇到相同问题的人:

const imageIds: ObjectId[] = payload.imageIds.map(e => new ObjectId(e));
const userIds: ObjectId[] = payload.userIds.map(e => new ObjectId(e));

 await this.userModel
  .updateMany(
    { _id: { $in: userIds } },
    { $inc: { 'images.$[element].views': 1 } },
    {
      arrayFilters: [
        {
          'element._id': { $in: imageIds },
        },
      ],
    },
  )
  .exec();