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

124
Visualizações
Cómo encontrar valor en una matriz de objetos en mongodb

Quiero obtener el valor de un objeto anidado dentro de una matriz. Obtengo el _id del objeto principal, así como el _id del objeto secundario dentro de la matriz, pero no puedo recuperar el valor de "solvedOn" para alternar una casilla de verificación (comportamiento).

Así que este es un objeto de ejemplo con sus objetos anidados:

 { _id: new ObjectId("6292722ea8173377658171ff"), title: 'work-list', tasks: [ { name: 'go to work', createdOn: '2022-05-28T19:04:14.799Z', solvedOn: false, _id: new ObjectId("6292722ea8173377658171f8") }, { name: 'do some work', createdOn: '2022-05-30T17:20:56.272Z', solvedOn: false, _id: new ObjectId("6294fdbf8717c09237c5098e") } ], __v: 0 }

Así que ya fui de esta manera:

 List.findOne( {_id: listID}, {tasks: { $elemMatch: { _id: taskID } }}, (err, res) => { console.log(res.tasks); } )

Cuando intento iniciar sesión en "res.tasks.solvedOn", el resultado es "indefinido". Aunque, cuando uso el marcador de posición: "res.tasks.$.solvedOn"

Esto es lo que me devuelve:

 [ { name: 'go to work', createdOn: '2022-05-28T19:04:14.799Z', solvedOn: false, _id: new ObjectId("6292722ea8173377658171f8") } ]

Entonces, ¿cómo puedo trabajar con el valor de "solvedOn" para alternar el estado de una casilla de verificación?

Me gusta:

 If (true) { // set value to false } else {// set value to true }
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Debe escribir res.tasks[0].solvedOn en lugar de res.tasks.solvedOn

Como tus tasks son una matriz

about 4 years ago · Juan Pablo Isaza Relatório

0

Cuando escribe res.tasks , devuelve una serie de tareas. Por lo tanto, no puede obtener el valor solvedOn con res.tasks.solvedOn . Debe dar el índice de la matriz para obtener el valor de la misma. Como res.tasks[0].solvedOn .

Mi sugerencia es que primero obtenga todas las tareas en una matriz como:

 const tasks = res.tasks;

Luego mapéalo donde quieras.

about 4 years ago · Juan Pablo Isaza Relatório

0

Si el elemento que necesita puede no ser el primero, puede usar una canalización de agregación con un $filter :

 db.collection.aggregate([ { $match: {_id: ObjectId("6292722ea8173377658171ff")} }, { $project: { _id: 0, res: { $filter: { input: "$tasks", as: "item", cond: {$eq: ["$$item._id", ObjectId("6294fdbf8717c09237c5098e")]} } } } } ])

ejemplo de patio de recreo

about 4 years ago · Juan Pablo Isaza 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