如何使用_ids使用nodejs更新(更新不赞成使用的)猫鼬子文档数组?

时间:2019-07-19 20:58:09

标签: node.js mongoose

所以我有一个订购模式

const orderSchema = new Schema({
    user: { type: Schema.Types.ObjectId, ref: 'users' },
    is_confirmed: Boolean,
    total: {type: Number,  default: 0},
    orderItems: [OrderItemSchema]
});

和OrderItem架构

const orderItemsSchema = new Schema({
    order: { type: Schema.Types.ObjectId, ref: 'Orders'},
    item: restaurantItemSchema,
    quantity: {type: Number, default: 0}
});

我得到了以下收藏

{
    "_id": {
        "$oid": "5d32144be453caf328cc8b57"
    },
    "total": 3,
    "orderItems": [
        {
            "quantity": 1,
            "_id": {
                "$oid": "5d32144be453caf328cc8b58"
            },
            "order": {
                "$oid": "5d32144be453caf328cc8b57"
            },
            "item": {
                "_id": "5d2cdc3c22dd025385850db2",
                "restaurant": "5d27c424a1275b4033a5b752",
                "name": "Pop",
                "price": 1.5,
                "__v": 0
            },
            "__v": 0
        }
    ],
    "user": {
        "$oid": "5d2b85cad17162914b558edf"
    },
    "is_confirmed": false,
    "__v": 1
}

我想更新订单的数量。

我尝试使用update方法,但已弃用。 所以我尝试了以下方法

                    let update = {

                            "total": total,
                            "orderItems.$.quantity": newquantity

                    }

                    let newOrder = await Order.findOneAndUpdate({
                        _id: order._id
                        "orderItems._id": orderItemPresent[0]._id
                    },{
                        $set: update
                    },{
                        returnNewDocument: true
                    });

变量newOrder即将成为null

我尝试过

db.orders.findOneAndUpdate({"orderItems._id" : ObjectId("5d32144be453caf328cc8b58")},{$set:{"orderItems.$.quantity":1}})

在mongo shell中运行良好,但不知道为什么它不能与node一起工作。

任何见识都将是一件好事! 谢谢!

更新:::::

我通过这样做发现了

    let cond = {
        _id : order._id,
        orderItems: {
            $elemMatch : {
                "item._id" : item._id
            }
        }  
    };
    let update = {
        "total": total,
        "orderItems.$.quantity":  newquantity
    }
    let myOrder = await Order.updateOne(cond, update).exec();

我能够更新值。 这意味着我无法使用其_id直接访问子文档,但是可以使用其内部任何值来访问它。

有人可以向我解释吗? 还会有什么方法可以使用它的_id来访问子文档,就像我之前尝试过的一样?

0 个答案:

没有答案