在特定字段内推送数据

问题描述

谁能告诉我如何在组内推送数据?

产品架构

    const productSchema = new mongoose.Schema({
    name:{
        type:String
    },user:[{ 
        author:{
            type: mongoose.Schema.Types.ObjectId,ref: 'user'
        }
    }],group:[{
        group:{
        type: mongoose.Schema.Types.ObjectId,ref: 'group',item:{
            type: mongoose.Schema.Types.ObjectId,ref: 'item',}
    }
    }],price:{
        type:number
    },});

productSchema.pre<IProduct>(/^find/,function(next) {
    this.populate({
          path: 'user.author',select: 'fullName email'
        });
        next();
      });

productSchema.pre<IProductSchema>(/^find/,function(next) {
    this.populate({
        path: 'group.group',select: '-__v'
        })
        next();
    });
 productSchema.pre<IProductSchema>(/^find/,function(next) {
        this.populate({
            path: 'group.group.item',select: '-__v -group'
        })
            next();
});

我成功填充了group.group,但在group.group.item中我无法推送数据,这是我的推送代码

        const updateProduct = await PRODUCT.findByIdAndUpdate(req.params.id,{
        $push: {
          group: { group: req.params.groupId}
        }
        }
    );
    const query = await Item.find().where(`group`).equals(req.params.groupId).select('-group id');
 query.forEach(async element => {
        const updateProduct = await PRODUCT.findByIdAndUpdate(req.params.id,{
            $push: {
                group: {"group.item": 'element._id'}}
            }
            
        );
    });

我花了最后几个小时试图找到解决方案,但不幸的是我找不到它。希望有人能够帮助我。

祝你有美好的一天!

解决方法

基于 $push documentation

$push 运算符将指定的值附加到数组

在模式项中是一个对象,如果你想推送一个值,就试试这样

item:[{
  type: mongoose.Schema.Types.ObjectId,ref: 'item',}]

如果您不想根据以下代码将项目的类型更改为 array,请找到带有 _idgroup._id 的文档,然后像这样更新项目

await PRODUCT.findOneAndUpdate(
  {
    _id: req.params.id,'group._id': groupId,},{
    "group.$.item" : "the ID"
  }
);

如果您更改了商品类型

await PRODUCT.findOneAndUpdate(
  {
    _id: req.params.id,{$push:{
    "group.$.item" : element._id
  }}
);