sql >> Database >  >> NoSQL >> MongoDB

Update met expressie in plaats van waarde

Ik kwam dit net tegen tijdens het zoeken naar het MongoDB-equivalent van SQL, zoals dit:

update t
set c1 = c2
where ...

Sergio heeft gelijk dat je niet kunt verwijzen naar een andere eigenschap als een waarde in een directe update. Echter, db.c.find(...) geeft een cursor terug en die cursor heeft een forEach methode :

Dus je kunt dit soort dingen zeggen:

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

om ze een voor een bij te werken zonder MongoDB te verlaten.

Als je een stuurprogramma gebruikt om verbinding te maken met MongoDB, dan zou er een manier moeten zijn om een ​​JavaScript-reeks naar MongoDB te sturen; met het Ruby-stuurprogramma zou u bijvoorbeeld 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 } }
        );
    });
})

Andere talen zouden vergelijkbaar moeten zijn.



  1. Mongodb als dan voorwaarde onder filter hoe te maken

  2. MongoDB BSON-limiet voor documentgrootte begrijpen

  3. Een open Redis-verbinding behouden met BookSleeve

  4. npm install -g mongodb installeert mongodb niet wereldwijd op OSX 10.8.4?