无法使用MongoDB更新嵌套对象值

无法使用MongoDB更新嵌套对象值,mongodb,mongoose,Mongodb,Mongoose,我试图更新mongoDB文档中的一个值,但它没有更新任何内容。下面让我解释一下我的代码 const Product = new Schema({ StoreCode: { type: String}, ProductName : { type: String}, CouponRules: [ { CouponId: String, CouponCode: String, Co

我试图更新mongoDB文档中的一个值,但它没有更新任何内容。下面让我解释一下我的代码

const Product = new Schema({

    StoreCode: { type: String},
    ProductName : { type: String},
    CouponRules: [
          {
            CouponId: String, 
            CouponCode: String, 
            CouponValue: Number, 
            Description: String,
            SKU: String,
            Category: String,
            CouponType: String,
            CouponCount: Number, 
            StartDate: String,
            EndDate: String, 
            IsActive: String
          }
        ]
})
以上是我的猫鼬模式

const productsCollection = loadMongoModel(PRODUCTS_COLLECTION);
        data.tableInfo.forEach(element => {
            let arr = [];
            const coupon = {
                CouponId: Coupon._id,
                CouponCode: data.data.CouponCode, 
                CouponValue: data.data.CouponValue, 
                Description: data.data.CouponDescription,
                SKU: '',
                Category: data.data.CouponCategory,
                CouponType: data.data.Type,
                CouponCount: data.data.Count, 
                StartDate: data.data.StartDate,
                EndDate: data.data.EndDate, 
                IsActive: data.data.IsActive
            }
            arr.push(coupon);
            if (element.checked == true) {
                const objectId = isObjectID(element._id);
                const pro = {
                    CouponRules : arr
                }
                const result = productsCollection.update( { _id : objectId}, { $set : pro }, { multi:true });

            }
        });

在这里,我试图只添加一个新行的
CouponRules
值,但无法这样做

您必须使用
$push
将新行添加到CouponRules数组中,而不是直接使用变量
优惠券

const result=productsCollection.update(
{u id:objectId},{$push:{CouponRules:优惠券},{multi:true}
);

否,同一问题。请检查下面的答案,因为您不应使用
pro
,而应直接使用
优惠券。让我知道它是否有效。你想在这里做什么?您是完全用新数组替换
CouponRules
,还是将新对象推送到现有的
CouponRules
数组?您还可以执行
productsCollection.find({u id:objectId})
&如果您要取回文档,请告诉我!!它也会产生同样的问题。请尝试更改此
const objectId=isObjectID(元素id)
const objectId=objectId(元素.\u id)