所以我有一个订购模式
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
来访问子文档,就像我之前尝试过的一样?