【问题标题】:MongoDB - Update objects in side a nested array in a collection (nested updating)MongoDB - 更新集合中嵌套数组中的对象(嵌套更新)
【发布时间】:2023-04-03 01:05:01
【问题描述】:

更新前的优惠券收集

{
    "_id": ObjectId("571501b7cbd85fe5ce5a749c"),
    "storeCode": "LULUMALL",
    "offers": [{
            "name": "offer1",
            "coupens": [
                { "coupen": "adssd", "status": "open" },
                { "coupen": "sdsafa", "status": "open" },
                { "coupen": "wewerw", "status": "open" },
                { "coupen": "cvvdf", "status": "open" },
                { "coupen": "dfdfadf", "status": "open" },
                { "coupen": "dfdfd", "status": "open" },
                { "coupen": "dfdf", "status": "open" },
                { "coupen": "dfsdf", "status": "open" }
            }
        ]
    },
    {
        "name": "offer2",
        "coupens": [
            { "coupen": "dffddd", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "sdfsdf", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "sfsdfd", "status": "open" },
            { "coupen": "dffdfd", "status": "open" },
            { "coupen": "sdfsdf", "status": "open" },
            { "coupen": "dfdfdd", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "dfsdff", "status": "open" },
        ]
    }]
}

我有storeCode,offer name&coupen。所以我需要将对应对象的status更新为alloted

例如:如果storeCode =LULUMALL ,name=offer1& coupen=adssd,所以我需要将对应对象的status更新为allotted。更新后,集合应该像这。 更新后的Coupen收集

{
    "_id": ObjectId("571501b7cbd85fe5ce5a749c"),
    "storeCode": "LULUMALL",
    "offers": [{
            "name": "offer1",
            "coupens": [
                { "coupen": "adssd", "status": "allotted" },
                { "coupen": "sdsafa", "status": "open" },
                { "coupen": "wewerw", "status": "open" },
                { "coupen": "cvvdf", "status": "open" },
                { "coupen": "dfdfadf", "status": "open" },
                { "coupen": "dfdfd", "status": "open" },
                { "coupen": "dfdf", "status": "open" },
                { "coupen": "dfsdf", "status": "open" }
            }
        ]
    },
    {
        "name": "offer2",
        "coupens": [
            { "coupen": "dffddd", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "sdfsdf", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "sfsdfd", "status": "open" },
            { "coupen": "dffdfd", "status": "open" },
            { "coupen": "sdfsdf", "status": "open" },
            { "coupen": "dfdfdd", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "dfdfdf", "status": "open" },
            { "coupen": "dfsdff", "status": "open" },
        ]
    }]
}

【问题讨论】:

    标签: mongodb mongoose nosql


    【解决方案1】:

    我只是将这些数据复制到一个新变量中,并根据条件将status字段的值更改为allotted

    这里shopData是输入数据

    var updateData = shopData;
    

    updateDatashopData 的副本。

    updateCoupen.offers[index].coupens[randomNo].status = 'allotted';
    

    indexrandomNo 将根据条件获取。

    Coupen.update({ "storeCode": store }, { $set: { 'offers': updateData.offers } }, function(err, numAffected) {
        console.log('numAffected', numAffected);
    
    })
    

    完整代码

    var store = 'LULUMALL';
    var name = 'offer1';
    var coupen = 'adssd';
    var shopData = {
        "_id": ObjectId("571501b7cbd85fe5ce5a749c"),
        "storeCode": "LULUMALL",
        "offers": [{
                "name": "offer1",
                "coupens": [
                    { "coupen": "adssd", "status": "open" },
                    { "coupen": "sdsafa", "status": "open" },
                    { "coupen": "wewerw", "status": "open" },
                    { "coupen": "cvvdf", "status": "open" },
                    { "coupen": "dfdfadf", "status": "open" },
                    { "coupen": "dfdfd", "status": "open" },
                    { "coupen": "dfdf", "status": "open" },
                    { "coupen": "dfsdf", "status": "open" }
                }
            ]
        },
        {
            "name": "offer2",
            "coupens": [
                { "coupen": "dffddd", "status": "open" },
                { "coupen": "dfdfdf", "status": "open" },
                { "coupen": "sdfsdf", "status": "open" },
                { "coupen": "dfdfdf", "status": "open" },
                { "coupen": "sfsdfd", "status": "open" },
                { "coupen": "dffdfd", "status": "open" },
                { "coupen": "sdfsdf", "status": "open" },
                { "coupen": "dfdfdd", "status": "open" },
                { "coupen": "dfdfdf", "status": "open" },
                { "coupen": "dfdfdf", "status": "open" },
                { "coupen": "dfsdff", "status": "open" },
            ]
        }]
    }
    
    for (var i = 0; i < shopData.offers.length; i++) {
        if (shopData.offers[i].name === offer) {
            var coupen = [];
            var index = i;
            for (var j = 0; j < shopData.offers[i].coupens.length; j++) {
                if (shopData.offers[i].coupens[j].status === "open") {
    
                    coupen.push(shopData.offers[i].coupens[j]);
                }
            }
            console.log('Available Coupens', coupen);
            var randomNo = Math.floor(Math.random() * coupen.length);
            var rand = coupen[randomNo];
            var updateCoupen = shopData;
            updateCoupen.offers[index].coupens[randomNo].status = 'allotted';
            Coupen.update({ "storeCode": store }, { $set: { 'offers': updateCoupen.offers } }, function(err, numAffected) {
                console.log('numAffected', numAffected);
    
            })
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多