MongoDB: actualizar cada documento en un campo


Tengo una colección llamada foo hipotéticamente.

Cada instancia de foo tiene un campo llamado lastLookedAt que es una marca de tiempo UNIX desde epoch. Me gustaría poder ir a través del cliente MongoDB y establecer esa marca de tiempo para todos los documentos existentes (alrededor de 20,000 de ellos) a la marca de tiempo actual.

¿Cuál es la mejor manera de manejar esto?

 155
Author: randombits, 2012-01-27

3 answers

En el shell de Mongo, o con cualquier cliente de Mongodb:

• Para Mongodb >= 3.2:

db.foo.updateMany({}, {$set: {lastLookedAt: Date.now() / 1000}})

Véase http://docs.mongodb.org/manual/tutorial/modify-documents/#update-multiple-documents

  • {} es la condición (la condición vacía coincide con cualquier documento)
  • {$set: {lastLookedAt: Date.now() / 1000}} es lo que quieres hacer

• Para Mongodb >= 2.2:

db.foo.update({}, {$set: {lastLookedAt: Date.now() / 1000}}, { multi: true })

Véase http://docs.mongodb.org/manual/tutorial/modify-documents/#update-multiple-documents

  • {} es la condición (la condición vacía coincide con cualquier documento)
  • {$set: {lastLookedAt: Date.now() / 1000}} es lo que quieres hacer
  • {multi: true} es la opción" actualizar varios documentos "

• Para Mongodb

db.foo.update({}, {$set: {lastLookedAt: Date.now() / 1000}}, false, true)

Véase https://web.archive.org/web/20120613233453/http://www.mongodb.org/display/DOCS/Updating

  • {} es la condición (la condición vacía coincide con cualquier documento)
  • {$set: {lastLookedAt: Date.now() / 1000}} es lo que quieres hacer
  • false es para el parámetro "upsert" (insertar si no está presente, o actualizar - no lo que desea)
  • true es para el parámetro "multi" (actualizar registros múltiples)
 336
Author: Philippe Plantier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-30 15:03:09

Este código será útil para usted

        Model.update({
            'type': "newuser"
        }, {
            $set: {
                email: "[email protected]",
                phoneNumber:"0123456789"
            }
        }, {
            multi: true
        },
        function(err, result) {
            console.log(result);
            console.log(err);
        })  
 7
Author: Jitendra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-24 12:31:05

He estado usando el controlador MongoDB.NET durante un poco más de un mes. Si tuviera que hacerlo usando el controlador. NET, usaría el método Update en el objeto collection. Primero, construiré una consulta que me dará todos los documentos que me interesan y actualizaré los campos que quiero cambiar. Actualizar en Mongo solo afecta al primer documento y para actualizar todos los documentos resultantes de la consulta se necesita usar el indicador de actualización' Multi'. A continuación se muestra el código...

var collection = db.GetCollection("Foo");
var query = Query.GTE("No", 1); // need to construct in such a way that it will give all 20K //docs.
var update = Update.Set("timestamp", datetime.UtcNow);
collection.Update(query, update, UpdateFlags.Multi);
 3
Author: user1163459,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-27 19:08:24