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

406
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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