Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

248
Visualizações
Consulta para actualizar todos los documentos de las colecciones según el valor clave usando MongoDB

Necesito actualizar todos los documentos de una colección pero con un valor diferente según la condición usando MongoDB. Aquí está mi colección:

usuarios_db:

 { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541a"), "device_type" : "Android" }, { "_id" : ObjectId("4e93037bbf6f1dd3a0a9541b"), "device_type" : " " }

Aquí necesito agregar una columna adicional ( ie-version ) para cada documento y también actualizar version=1.0 cuando "device_type": "Android" y version='' cuando "device_type": " ".

Necesito consulta para esto.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Creo que no puede haber una sola consulta para hacer dos tipos de operaciones, pero podría haber dos consultas

 db.db_users.update({'device_type':"Android"},{$set : {'version':"1.0"}},{multi:true}); db.db_users.update({'device_type':""},{$set : {'version':""}},{multi:true});

también en el documento muestra un espacio en blanco " ", mientras que en cuestión lo mencionaste "". si no es consistente, debe usar $or.

También se puede hacer a través de un solo script.

 db.db_users.find().forEach(function(doc){if(doc.device_type && doc.device_type==='Android'){doc.version="1.0"}else{doc.version=""} db.db_users.save(doc)});

si hay una lógica múltiple, es mejor optar por el script, si solo está limitado, como mencionó en su pregunta, serían preferibles dos actualizaciones.

over 4 years ago · Santiago Trujillo Relatório

0

Para MongoDB 3.4 y posteriores:

Usando el marco de agregación, la $addFields y $out actualizaría su colección con una sola operación agregada. Por ejemplo:

 db.users.aggregate([ { "$addFields": { "version": { "$switch": { "branches": [ { "case": { "$eq": ["$device_type", "Android"] }, "then": "1.0" }, { "case": { "$eq": ["$device_type", " "] }, "then": "" } ] } } } }, { "$out": "users" } ])

Para MongoDB 3.2 :

Puede utilizar los métodos bulkWrite para actualizaciones más rápidas y eficientes. Considere la siguiente operación:

 var ops = []; db.users.aggregate([ { "$project": { "version": { "$cond": [ { "$eq": ["$device_type", "Android"] }, "1.0", "" ] } } } ]).forEach(function(doc){ ops.push( { "updateOne": { "filter": { "_id": doc._id }, "update": { "$set": { "version": doc.version } } } }); if (ops.length === 500) { // Execute per 500 operations and re-initialise db.users.bulkWrite(ops); ops = []; } }) if (ops.length > 0) { db.users.bulkWrite(ops); }

Para MongoDB <= 3.0 y >= 2.6 :

 var bulk = db.users.initializeUnorderedBulkOp(); var count = 0; db.users.aggregate([ { "$project": { "version": { "$cond": [ { "$eq": ["$device_type", "Android"] }, "1.0", "" ] } } } ]).forEach(function(doc) { bulk.find({ "_id": doc._id }).updateOne({ "$set": { "version": doc.version } }); count++; if (count % 500 === 0) { // Excecute per 500 operations and re-initialise bulk.execute(); bulk = db.users.initializeUnorderedBulkOp(); } }) // clean up remaining operations in queue if (count > 0) { bulk.execute(); }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda