【发布时间】:2018-09-02 02:27:01
【问题描述】:
我有这个架构:
const guestSchema = new Schema({
id: String,
cart: [
{
product: {
type: mongoose.Schema.ObjectId,
ref: "products"
},
quantity: Number
}
]
});
我有这个问题:
Guest.findOneAndUpdate(
{ id: req.sessionID },
{
$cond: [
{ "cart.product": { $ne: req.body.itemID } },
{ $push: { "cart": { product: req.body.itemID, quantity: 1 } } },
{ $inc: { "cart.quantity": 1 } }
]
},
{ upsert: true, new: true }
).exec(function(err, docs) {
err ? console.log(err) : res.send(docs);
});
基本上,我要做的是根据条件进行更新。我尝试使用$cond,但发现该运算符不用于像我正在做的查询。
基于此:
{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }
我想要与此运算符的功能类似的东西用于我的查询。
让我们分解一下我的情况:
对于我的布尔表达式:我想检查 req.body.itemID 是否是 $ne 到我购物车中的任何值
如果为真则:$push 将商品 ID 和数量放入购物车
否则(则项目已经存在):$inc数量减1
问题:如何实现这个结果?我需要进行两个单独的查询吗?如果可能的话,我会尽量避免这样做
【问题讨论】:
-
也许这对你有帮助? stackoverflow.com/questions/37376999/…
标签: mongodb mongoose mongodb-query