sql >> Database teknologi >  >> NoSQL >> MongoDB

Opdater med udtryk i stedet for værdi

Jeg stødte lige på dette, mens jeg søgte efter MongoDB-ækvivalenten til SQL som denne:

update t
set c1 = c2
where ...

Sergio har ret i, at du ikke kan henvise til en anden egenskab som en værdi i en lige opdatering. Dog db.c.find(...) returnerer en cursor, og den markør har en forEach metode :

Så du kan sige ting som dette:

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

at opdatere dem én ad gangen uden at forlade MongoDB.

Hvis du bruger en driver til at oprette forbindelse til MongoDB, så burde der være en måde at sende en streng JavaScript ind i MongoDB; for eksempel, med Ruby-driveren ville du bruge 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 } }
        );
    });
})

Andre sprog bør ligne hinanden.



  1. Hvordan genererer man Mongodb-dokumenter rekursivt ved hjælp af mongocxx c++-driver?

  2. MongoDB-fund i samling med ukendt nøgle

  3. MongoDB Count() vs. Aggregation

  4. MongoDB :hvor går grænsen mellem få og mange?