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

320
Visualizações
mongo $ filtro y condición múltiple en matriz sub-sub

Tengo esta porción de colecciones:

 [{ "_id": ObjectId("604f3ae3194f2135b0ade569"), "parameters": [ { "_id": ObjectId("602b7455f4b4bf5b41662ec1"), "name": "Purpose", "options": [ { "id": ObjectId("602b764ff4b4bf5b41662ec2"), "name": "debug", "sel": true }, { "id": ObjectId("602b767df4b4bf5b41662ec3"), "name": "performance", "sel": false }, { "id": ObjectId("602b764ff4b4bf5b41662ec4"), "name": "security", "sel": true }, { "id": ObjectId("602b767df4b4bf5b41662ec5"), "name": "Not Applicable", "sel": false } ], "type": "multiple" }] }]

Y esta consulta:

 db.testCollection.aggregate([ { $unwind: "$parameters" }, { $match: { "parameters._id": ObjectId("602b7455f4b4bf5b41662ec1"), } }, { $addFields: { match: { $filter: { input: "$parameters.options", as: "option", cond: { $and: [ { $eq: ["$$option.id", ObjectId('602b764ff4b4bf5b41662ec2')] }, { $eq: ["$$option.sel", true] } ] } } } } } ])

El resultado es una nueva coincidencia de matriz con, en este caso,

 "match": [ { "id": ObjectId("602b764ff4b4bf5b41662ec2"), "name": "debug", "sel": true } ]

Cómo puedo emparejar, para colecciones, emparejar por ejemplo

 "id": ObjectId("602b764ff4b4bf5b41662ec2") and "id": ObjectId("602b764ff4b4bf5b41662ec4")

y tiene una matriz de resultados con o dos resultados o vacía?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No estoy seguro de que sea posible en una sola condición dentro $filter , pero puede intentarlo con $let ,

  • $let declarar una variable llamada filtered y almacenar su resultado filtrado
  • $in para verificar la condición si el tamaño del elemento filtrado es 2 y luego devolver el resultado filtrado; de lo contrario, la matriz en blanco
  • Tienes que poner el número con el que estás haciendo coincidir el número de identificaciones en el filtro en la condición $eq
 { $addFields: { match: { $let: { vars: { filtered: { $filter: { input: "$parameters.options", as: "option", cond: { $and: [ { $in: [ "$$option.id", [ObjectId("602b764ff4b4bf5b41662ec2"), ObjectId("602b767df4b4bf5b41662ec3")] ] }, { $eq: ["$$option.sel", true] } ] } } } }, in: { $cond: [ { $eq: [{ $size: "$$filtered" }, 2] }, "$$filtered", [] ] } } } } }

Patio de recreo

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