MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Aktualizuj za pomocą wyrażenia zamiast wartości

Właśnie natknąłem się na to podczas wyszukiwania odpowiednika MongoDB SQL w ten sposób:

update t
set c1 = c2
where ...

Sergio ma rację, że nie można odwoływać się do innej właściwości jako wartości w prostej aktualizacji. Jednak db.c.find(...) zwraca kursor i ten kursor ma forEach metoda :

Możesz więc powiedzieć takie rzeczy:

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

aktualizować je pojedynczo bez opuszczania MongoDB.

Jeśli używasz sterownika do łączenia się z MongoDB, powinien istnieć sposób na przesłanie ciągu JavaScript do MongoDB; na przykład ze sterownikiem Ruby użyjesz 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 } }
        );
    });
})

Inne języki powinny być podobne.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wykonać niestandardowe mapowanie za pomocą złącza mongo z Elasticsearch?

  2. Brak składni; przed oświadczeniem w mongoexport

  3. Parametry połączenia w MongoDB (z przykładami)

  4. MongoDB $toLower

  5. Jak znaleźć przedmioty za pomocą wyrażenia regularnego w Mongoose