Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

494
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!