我知道我可以使用$set
进行更新:
Contact.update({
_id: request.id
}, {
$set: { name: newNameValue }
}, {
upsert: false
}, function(err) { ... });
但在这种情况下,我不想传递newNameValue
,而是希望使用之前的name
值来计算新值。让我们说我想把旧名称大写,比如:
Contact.update({
_id: request.id
}, {
$set: { name: $old.name.toUpperCase() }
}, {
upsert: false
}, function(err) { ... });
答案 0 :(得分:1)
我认为这已经在这里得到了解答:How to add new data to current string in MongoDB?所以请检查一下,以获得更详细的答案,但总之,您只能通过一次查询来做到这一点。
使用Mongoose
执行此操作的方法,如this official Mongoose example:
Contact.findById(request.id, (err, contract) => {
if (err) return handleError(err);
contract.name = contract.name.toUpperCase();
contract.save((err, contractContract) => {
if (err) return handleError(err);
...
});
});
答案 1 :(得分:0)
据我所知,这是不可能的。你需要找到然后更新
Contact
.find({
_id: request.id
})
.exec(function(err, data) {
if (err) {
return ...;
}
Contact.findByIdAndUpdate(request.id, {
$set: {
name: data.name.toUpperCase()
}
}, {
new: true
}, function(err, doc) {
if (err) return ...;
console.log(doc)
});
}