undefined
undefined

Reputation: 2129

Mongoose update multiple subdocuments from multiple documents

I want to update multiple subdocuments from multiple documents using mongoose.

My current code is:

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

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

And part of the schema is:

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

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

But this code only updates the last element from the ids arr.

Upvotes: 0

Views: 387

Answers (1)

undefined
undefined

Reputation: 2129

Solved!

For those who encounter the same problem:

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();

Upvotes: 1

Related Questions