首页 > 解决方案 > 无法使用 MongoDB 更新嵌套对象值

问题描述

我正在尝试从 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一个新行的值,但无法做到这一点。

标签: mongodbmongoose

解决方案


您必须使用$pushCouponRules数组添加新行,而不是直接pro使用变量coupon

const result = productsCollection.update(
    { _id : objectId}, {$push: { CouponRules : coupon }}, { multi:true }
);

推荐阅读