如何使用MongoDB / Mongoose中的先前值更新字段

时间:2017-05-24 22:05:32

标签: mongodb mongoose

我知道我可以使用$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) { ... });

2 个答案:

答案 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)
            });
        }