我有以下文档
{ "价值":5 }
我希望更新能够实现以下目标:
{ " value_old":5, "价值":3 }
我正在尝试使用以下更新查询来实现此目的
{
$rename: {"value": "value_old"}
},
{ $set :{
"value": (wtv new value was sent to the function) 3
}
此代码似乎无法正常工作.... 我不想执行两个单独的更新查询
我已经尝试了汇总和最后一个$ out,但这会导致删除整个集合,我只想更新单个文档。
我这样做的原因是因为我需要将操作变为原子操作。我刚刚读了db.eval(),它看起来很有希望,因为它会锁定数据库的读写。有谁知道如何使用db.eval()来执行2次更新?
答案 0 :(得分:0)
如果使用MongoClient,则可以以异步方式处理。例如:
const MongoClient = require('mongodb').MongoClient;
function updateDB (newVal) {
return MongoClient.connect(MONGODB_URL)
.then( (database) => {
return Promise.all([
database.collection('yourCollection').update({id: 123}, {$rename: {'value': 'value_old'}}),
database.collection('yourCollection').update({
$set: {'value': newVal}
})
])
.then(() => {
database.close(true);
})
.then(() => {
return `new value: ${newVal} has been updated in : ${whatever}`;
})
.catch((err) => {
database.close(true);
throw err;
});
})
}
这就是我所做的,并且只有在所有操作完成后才能安全执行许多操作并关闭数据库。