MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mit Ausdruck anstelle von Wert aktualisieren

Ich bin gerade darauf gestoßen, als ich nach dem MongoDB-Äquivalent von SQL suchte:

update t
set c1 = c2
where ...

Sergio hat Recht, dass Sie in einem direkten Update nicht auf eine andere Eigenschaft als Wert verweisen können. Allerdings db.c.find(...) gibt einen Cursor zurück und dieser Cursor hat einen forEach Methode :

Sie können also Dinge wie diese sagen:

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

um sie einzeln zu aktualisieren, ohne MongoDB zu verlassen.

Wenn Sie einen Treiber verwenden, um eine Verbindung zu MongoDB herzustellen, sollte es eine Möglichkeit geben, eine JavaScript-Zeichenfolge an MongoDB zu senden. Beim Ruby-Treiber würden Sie beispielsweise auswerten :

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

Andere Sprachen sollten ähnlich sein.