首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新mongodb中的嵌套值

更新mongodb中的嵌套值
EN

Stack Overflow用户
提问于 2018-06-20 21:51:35
回答 1查看 39关注 0票数 0

我在更新product_details信息内部的值时遇到问题。我在product_details信息中发送预留id和产品id,它们的"is_picked“值需要标记为"true”。我有一个预约表,我正在其中保存我的预留。

代码语言:javascript
复制
{ 
"_id" : ObjectId("5b2a56c165cb721d8036923e"), 
"guest_details" : {
    "name" : "sanaullahAhmad", 
    "contact_number" : "0332695258"
}, 
"status" : "pending", 
"products_details" : [
    {
        "is_picked" : false, 
        "_id" : ObjectId("5b2a56c165cb721d80369240"), 
        "product" : {
            "in_stock" : true, 
            "special_offers" : "This is special offer", 
            "is_active" : true, 
            "_id" : ObjectId("5b10dc0aa5d60c23a8947e7a"), 
            "date_registered" : ISODate("2018-06-01T05:39:22.581+0000"), 
            "medicine_name" : "Panadol syrup", 
            "drug_reg_num" : "1236545", 
            "vendor_id" : "5b11212d4405ce1b30663152", 
            "strength" : "32", 
            "strength_unit" : "mm", 
            "price" : "225", 
            "volume" : "456", 
            "volume_unit" : "kilogrames", 
            "category" : "Capsules", 
            "active_substance_1" : "active_substance_1", 
            "active_substance_2" : "active_substance_2", 
            "active_substance_3" : "active_substance_4", 
            "active_substance_4" : "", 
            "mah_name" : "this is mah name", 
            "__v" : NumberInt(0)
        }, 
        "qty" : NumberInt(15)
    }, 
    {
        "is_picked" : false, 
        "_id" : ObjectId("5b2a56c265cb721d80369241"), 
        "product" : {
            "in_stock" : true, 
            "special_offers" : "This is special offer", 
            "is_active" : true, 
            "_id" : ObjectId("5b0d4c9abcd16f0558afce85"), 
            "date_registered" : ISODate("2018-05-29T12:50:34.299+0000"), 
            "medicine_name" : "Sirgical spirit", 
            "drug_reg_num" : "1236545", 
            "vendor_id" : "5b11212d4405ce1b30663152", 
            "strength" : "32", 
            "strength_unit" : "mm", 
            "price" : "225", 
            "volume" : "456", 
            "volume_unit" : "kilogrames", 
            "category" : "Capsules", 
            "active_substance_1" : "active_substance_1", 
            "active_substance_2" : "active_substance_2", 
            "active_substance_3" : "active_substance_4", 
            "active_substance_4" : "active_substance_4", 
            "mah_name" : "this is mah name", 
            "__v" : NumberInt(0)
        }, 
        "qty" : NumberInt(17)
    }
], 
"acceptance_time" : ISODate("2018-06-20T13:29:37.778+0000"), 
"created_at" : ISODate("2018-06-20T13:29:37.779+0000"), 
"guest_id" : "5b0d1b2bf734e104f46e3403", 
"vendor_id" : "5b11212d4405ce1b30663152", 
"__v" : NumberInt(0)
}

我想在node js Mongoose Module中运行一个更新查询,它将更改product_details中的"is picked“值,我当前的代码在这里,它不起作用。

代码语言:javascript
复制
let reservation = await Reservation.findById(req.params.id);
            if (reservation !== null) {
                var ctr = 0;
                reservation.products_details.forEach(async function (pro_id, index_fe, array) 
                {
                    let cart_item = await Reservation.update({
                        '_id':  req.params.id,
                        'products_details.product._id': {$in: req.body.product_ids},
                    }, {$set: {'products_details.is_picked': true}});
                });
                return callback(null, utility.success_response({
                            reservation_id: req.params.id, 
                            product_ids: req.body.product_ids
                        }, "Reservation is marked picked now."));
            }
EN

回答 1

Stack Overflow用户

发布于 2018-06-21 11:07:08

您可以使用javascript includes()检查product_details中的_id,使用model.save()更新文档,而不是多次更新文档,这取决于product_ids中有多少项。

代码语言:javascript
复制
Reservation.findById(req.params.id, (err, reservation) => {
    if (reservation) {
        reservation.products_details.forEach((product) => {
            if (req.body.product_ids.includes(product.product._id)) {
                product.is_picked  = true;
            }
        })
        reservation.save((err, callback) => {});
    }
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50949907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档