Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

401
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda