mongoose 需要使用$addToSet MongoDb Nestjs的有效更新修饰符

aor9mmx1  于 2023-01-13  发布在  Go
关注(0)|答案(1)|浏览(154)

我需要使用$addToSet在数组中添加一个引用。
这是我的图式

@Allow()  
  @ApiProperty(GatewaySchemaSwagger.API_PROP_ADMIN_ID)
  @Prop({required: true, type: [MongooseSchema.Types.ObjectId] , ref: 'User' })
  admin: [User];

这是我收藏

{
"_id" : ObjectId("63c022bfd2d744ebaffe3412"),
"buttons" : [],
"admin" : [ 
    ObjectId("636bc633ccc1e71aa32ad831")
],
"user" : ObjectId("636bc633ccc1e71aa32ad831"),
"channelId" : "1",    
}

这是我的最新消息

let findUser = await this.usersService.findByEmail(data.email);
await this.GatewayModel.findOneAndUpdate({ admin: userId, channelId: channelId }, { $addtoSet: { "admin": [findUser._id]  } })

我的错误是:
未知修饰符:$addtoSet。应为指定为数组的有效更新修饰符或管道样式更新

epggiuax

epggiuax1#

如果要添加单个项目,请使用$addtoSet,而不使用findUser._id周围的[]

await this.GatewayModel.findOneAndUpdate(
  { admin: userId, channelId: channelId },
  { $addtoSet: { "admin": findUser._id  } }
)

了解它在playground example上的工作原理
如果您想添加MongooseSchema.Types.ObjectId数组,一个选项是对$setUnion使用update with pipeline:

await this.GatewayModel.findOneAndUpdate(
  { admin: userId, channelId: channelId },
  [{$set: {admin: {$setUnion: ["$admin", [findUser._id]]}}}]
)

了解它在playground example上的工作原理

相关问题