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

397
Views
Actualice el elemento en la matriz si existe; de lo contrario, inserte un nuevo elemento en esa matriz en MongoDb

Tengo un grupo de matriz de elementos en MongoDB como se indica a continuación:

 { "_id" : 5, "quizzes" : [ { "wk" : 1, "score" : 10 }, { "wk" : 2, "score" : 8 }, { "wk" : 3, "score" : 5 } ], "play" : [ { "wk" : 2, "score" : 8 }, { "wk" : 3, "score" : 5 } ] }

Estoy tratando de insertar un nuevo registro en la matriz si no está presente y si el registro está presente en esa matriz, actualice ese registro de la matriz. A continuación se muestra mi consulta MongoDB.

 db.push.update( { _id: 5 }, { $push: { "quizzes": {"wk" : 6.0,"score" : 8.0},"play": {"wk" : 6.0,"score" : 8.0} } } )

Cada vez que ejecuto esta consulta, inserta un nuevo registro en la matriz, pero quiero que si el registro está presente, actualice esa matriz.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Use $addToSet en lugar de $push .

 db.push.update( { _id: 5 }, { $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } } )

EDITAR:

No existe un enfoque integrado simple para la actualización condicional de subdocumentos en un campo de matriz, por propiedad específica. Sin embargo, un pequeño truco puede hacer el trabajo ejecutando dos comandos en secuencia.

Por ejemplo: si queremos actualizar el campo de quizzes con el objeto { "wk": 7.0, "score": 8.0 } , podemos hacerlo en dos pasos:

Paso 1: $pull subdocumentos de la matriz de quizzes donde "wk": 7.0 . ( No sucede nada si no se encuentra el subdocumento coincidente ).

 db.push.update( { _id: 5 }, { $pull: { "quizzes": { "wk": 7.0 } } } )

Paso 2: $addToSet el subdocumento.

 db.push.update( { _id: 5 }, { $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } } )

Puede combinar los dos comandos de actualización anteriores usando bulk.find().update()

over 4 years ago · Santiago Trujillo Report

0

Supongo que lo que quiere hacer es agregar una propiedad a un elemento de la matriz en función del valor de la propiedad diferente del mismo elemento.

Puede usar la función updateOne() con el operador $(update) , consulte el documento documentación de mongodb para $(update) .

Supongamos que desea agregar una descripción de propiedad al elemento de matriz donde el valor de wk es 1 (suponiendo que sea algún tipo de clave según lo que ha proporcionado)

Entrada: Su recopilación de datos dada en la pregunta.

Comando Mongo:

 db.<your_collection_name>.updateOne( { "_id":5, "quizzes.wk":1 }, { $set:{ "quizzes.$.description":"I am a new property" } });

Producción:

 { "_id" : 5, "quizzes" : [ { "wk" : 1, "score" : 10, "description" : "I am a new property" }, { "wk" : 2, "score" : 8 }, { "wk" : 3, "score" : 5 } ], "play" : [ { "wk" : 2, "score" : 8 }, { "wk" : 3, "score" : 5 } ] }

Nota: Solo cambiará una entrada de una matriz, la que coincida primero.

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!