gpt4 book ai didi

node.js - MongoDB:如果字段值小于10,则将字段值设置为10,否则加1

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:59 26 4
gpt4 key购买 nike

考虑以下代码:

findAndModify({id: id}, undefined, {$inc: {counter: 1}, {$max: {counter: 10})

此操作失败并出现错误,因为 $inc$max 都尝试更新同一字段。

但是,如果我想在计数器的值小于 10 时将其设置为 10,如果不小于 10,则将其值增加 1,该怎么办?我如何在一个原子操作中做到这一点?

有没有办法在一次操作中按顺序应用更新?

最佳答案

我认为这不可能通过一次操作来完成。但是,您可以使用条件语句创建聚合查询,然后在更新中使用该查询。

(async () => {
try {
const results = await Model.aggregate([
{ '$match': { 'id': id } },
{ '$project': {
'counter': {
'$cond': [
{ '$lt': ['$counter', 10 ] },
10,
{ '$add': ['$counter', 1 ] }
]
}
} }
]).exec();

const data = results[0];
const { counter } = data;

const doc = await Model.findOneAndUpdate({ id },
{ '$set': { counter } },
{ new: true }
).exec();

console.log(doc);
}
catch (err) {
console.error(err);
}
})()
<小时/>

对于原子更新,请包含一个查询,该查询限制 counter 仅小于给定上限值 10 的文档的增量:

findAndModify(
{
'id': id,
'counter': { '$lt': 10 }
}, undefined,
{ '$inc': { 'counter': 1 } },
callback
)

关于node.js - MongoDB:如果字段值小于10,则将字段值设置为10,否则加1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51822448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com