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