当前位置: 首页 > 知识库问答 >
问题:

Mongoose从多个文档更新多个子文档

卢雅惠
2023-03-14

我想使用mongoose从多个文档更新多个子文档。

我目前的代码是:

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 },
},

但是这段代码只更新id arr中的最后一个元素。

共有1个答案

朱修德
2023-03-14

解决了!

对于遇到同样问题的人:

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();
 类似资料:
  • 我试图更新一个子文档(有效),然后更新除上一个子文档之外的多个子文档。基本上,每次

  • 在我的用例中,我希望使用spring-data-mongo一次更新多个文档,即与查询匹配的文档。 这是我一直在尝试的, MongoDB-3.6 spring-data-mongoDB-1.5.5.release

  • 我有一份这样的文件: 我想通过将其与数量字段(2*800)相乘来更新价格字段,其中的结果将更新/分配给价格。(对于本例,价格更新为1600)。 更新后的文档: 我的选择查询如下: 我怎样才能做到这一点?

  • 我想通过猫鼬进行API调用,以将一批选定的(下面的模式)子文档的日期字段更新为当前日期。 Player模式: 我创建了一个复选框,用户可以在其中选择多个(以及他们的数组中的特定'卡片'子文档),并将所有选定的的特定卡片的日期更改为相同的日期...作为反应,我将相应的ObjectIds在主体中批处理在一起,并将选定的玩家/卡片组合发送到一个对象数组中,如下所示(其中数字表示相同的分组玩家 我正在发送

  • 我想知道mongoose是否有一些方法可以通过id集更新多个文档。例如: 我想知道的是,如果猫鼬能做这样的事情: 其中,ids是一个id数组,如['id1','id2','id3']-示例数组。对于find,同样的问题。

  • 我在MongoDB中使用Java驱动程序。我有一个集合中的文档id列表。我想在每个文档中更新一个字段,该文档的“\u id”等于列表中的一个文档id。在下面的示例中,我尝试了以下方法: 我的目的是用\u id=123、\u id=456和\u id=789更新文档,将其“field”属性设置为59。 我这样做对吗?