sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizujte výraz místo hodnoty

Právě jsem na to narazil při hledání ekvivalentu MongoDB SQL takto:

update t
set c1 = c2
where ...

Sergio má pravdu, že v přímé aktualizaci nemůžete odkazovat na jinou vlastnost jako na hodnotu. Nicméně db.c.find(...) vrátí kurzor a tento kurzor má forEach metoda :

Takže můžete říkat věci jako toto:

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

aktualizovat je jeden po druhém, aniž byste opustili MongoDB.

Pokud pro připojení k MongoDB používáte ovladač, měl by existovat nějaký způsob, jak poslat řetězec JavaScriptu do MongoDB; například s ovladačem Ruby byste použili 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 } }
        );
    });
})

Ostatní jazyky by měly být podobné.



  1. Jak vytvořím indexy pro datum?

  2. Jak obnovit výpis do běžícího mongodb

  3. Data dotazu se nezobrazují v zobrazení zf2?

  4. Kvůli omezení výjimky com.mongodb.BasicDBObject při přidání více kritérií dotaz GridFSDBFile