updateOne 基于条件
updateOne based on condition
await products.updateOne(
{
$and: [
{ name: { $eq: name } },
{ $expr: { $lt: ["$remaining", "$capacity"] } },
],
},
{ $inc: { remaining: 1 } },
{ returnOriginal: false }
);
不是像 { $expr: { $lt: ["$remaining", "$capacity"] } }
这样在查询中包含条件,有没有办法将此条件包含在更新参数中?
这样做的原因是如果 name
匹配,我希望 returned matchCount
到 return 1。
是的,如果您使用 mongo 4.2+ 使用聚合更新,就可以做到这一点。
db.collection.update({
$and: [ //condition goes here
{
name: {
$eq: "name"
}
},
],
},
[
{
"$set": { //conditional update
"remaining": {
"$switch": {
"branches": [
{
case: {
$lt: [ //condition to update
"$remaining",
"$capacity"
]
},
then: {
$add: [ //true case
"$remaining",
1
]
}
}
],
default: {
$add: [ //if no match
"$remaining",
0
]
}
}
}
}
}
])
await products.updateOne(
{
$and: [
{ name: { $eq: name } },
{ $expr: { $lt: ["$remaining", "$capacity"] } },
],
},
{ $inc: { remaining: 1 } },
{ returnOriginal: false }
);
不是像 { $expr: { $lt: ["$remaining", "$capacity"] } }
这样在查询中包含条件,有没有办法将此条件包含在更新参数中?
这样做的原因是如果 name
匹配,我希望 returned matchCount
到 return 1。
是的,如果您使用 mongo 4.2+ 使用聚合更新,就可以做到这一点。
db.collection.update({
$and: [ //condition goes here
{
name: {
$eq: "name"
}
},
],
},
[
{
"$set": { //conditional update
"remaining": {
"$switch": {
"branches": [
{
case: {
$lt: [ //condition to update
"$remaining",
"$capacity"
]
},
then: {
$add: [ //true case
"$remaining",
1
]
}
}
],
default: {
$add: [ //if no match
"$remaining",
0
]
}
}
}
}
}
])