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

209
Visualizações
Mongodb actualiza todos los documentos con identificación única

Tengo colección con products de nombre con casi 100k documentos. Quiero presentar una nueva clave llamada clave secondaryKey con valor único uuid en todos los documentos. Hago esto usando nodejs .

Problema al que me enfrento: -

Cuando intento la siguiente consulta,

 db.collection('products').updateMany({},{"$set":{secondaryKey: uuid()}});

Aquí actualiza todos los documentos con el mismo valor uuid ,

Intento con loop para actualizar el documento uno por uno, pero aquí el problema es que no tengo un valor de filter en updateOne porque quiero actualizar todos los documentos.

¿Alguien puede ayudarme aquí? Gracias :)

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

0

Si está utilizando la versión MongoDB> = 4.4 Puede probar esto:

 db.products.updateMany( {}, [ { $set: { secondaryKey: { $function: { body: function() { return UUID().toString().split('"')[1]; }, args: [], lang: "js" } } } } ] );

Producción

 [ { "_id": ObjectId("..."), "secondaryKey": "f41b15b7-a0c5-43ed-9d15-69dbafc0ed29" }, { "_id": ObjectId("..."), "secondaryKey": "50ae7248-a92e-4b10-be7d-126b8083ff64" }, { "_id": ObjectId("..."), "secondaryKey": "fa778a1a-371b-422a-b73f-8bcff865ad8e" } ]
over 4 years ago · Santiago Trujillo Relatório

0

Como no es el mismo valor que desea poner en cada documento, debe usar el bucle.

En su ciclo, debe actualizar el documento actual de la iteración. Entonces tienes que filtrar con el _id en el updateOne

over 4 years ago · Santiago Trujillo Relatório

0

La respuesta anterior no funcionó para mí. Además, compromete la seguridad cuando habilita javascript en su base de datos (vea aquí $función y habilitación de javascript en la base de datos). La mejor manera es no sobrecargar su servidor, haga su trabajo en local como se muestra a continuación:

 const { nanoid, customAlphabet } = require('nanoid') async function asdf() { const movies = await client.db("localhost").collection("productpost"); var result2 = [] let result = await movies.find({}).toArray() result.forEach(element => { const nanoid = customAlphabet('1234567890', 10) console.log(element.price) element.price = 4 element.id = nanoid() result2.push(element) }); console.log("out reult2", result2) await movies.deleteMany({}) await movies.insertMany(result2) })

Eliminará cualquier objeto en sus colecciones y se actualizará con los nuevos. Uso de nanoid como identificadores únicos.

Esta es la matriz de objetos de la base de datos después de agregar una identificación única:

 { "_id": { "$oid": "334a98519a20b05c20574dd1" }, "attach": "[\"http://localhost:8000/be/images/2022/4/bitfinicon.png\"]", "title": "jkn jnjn", "description": "jnjn", "price": 4, "color": "After viewing I am 48.73025772956596% more satisfied with life.", "trademark": "", "category": "[]", "productstate": "Published", "createdat": { "$date": "2022-04-03T17:40:54.743Z" }, "language": "en"}

PD: haga una copia de seguridad de su colección antes de hacer esto o filtre la matriz según sus necesidades para no revisar toda la colección.

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