MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mettre à jour avec une expression au lieu d'une valeur

Je viens de tomber sur ceci en cherchant l'équivalent MongoDB de SQL comme ceci :

update t
set c1 = c2
where ...

Sergio a raison de dire que vous ne pouvez pas référencer une autre propriété en tant que valeur dans une mise à jour directe. Cependant, db.c.find(...) renvoie un curseur et ce curseur a un forEach méthode :

Vous pouvez donc dire des choses comme ceci :

db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
    db.QUESTIONS.update(
        { _id: q._id },
        { $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
    );
});

pour les mettre à jour une par une sans quitter MongoDB.

Si vous utilisez un pilote pour vous connecter à MongoDB, il devrait y avoir un moyen d'envoyer une chaîne de caractères JavaScript dans MongoDB ; par exemple, avec le pilote Ruby, vous utiliseriez eval :

connection.eval(%q{
    db.QUESTIONS.find({}, {_id: true, i_up: true, i_down: true}).forEach(function(q) {
        db.QUESTIONS.update(
            { _id: q._id },
            { $set: { i_pp: q.i_up * 100 - q.i_down * 20 } }
        );
    });
})

Les autres langues doivent être similaires.