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

226
Vistas
Mongo devuelve las entradas que no coinciden por $IN

¿Hay alguna forma de que Mongo devuelva alguna indicación (bandera, campo, etc.) si una entrada en $in no coincide con ningún docs ?

Por favor vea mi Mongo Playgrond

Eso solo devuelve con éxito todos los documentos impares.

¿Cómo puedo tener alguna indicación de que no se encontraron los pares?

Me gustaría hacer esto dentro de Mongo. Obtengo que puedo iterar a través de los resultados en JS y realizar una diff .

Fwiw, este $in realidad será la primera etapa de un $match en un aggregate . Así que tal vez pueda usar algo como addFields para las diferencias.

¡Gracias!

Entonces, mi resultado deseado podría ser que cada coincidencia negativa aún obtenga un documento de retorno ... pero con una nueva propiedad found:false como la siguiente. Entonces... en mi ejemplo, los números pares no son fundados y sería genial ver algo como...

 { "_id": ObjectId("5a934e000102030405100006"), "key": 2, "found": false }, { "_id": ObjectId("5a934e000102230405000006"), "key": 4, "found": false }, { "_id": ObjectId("5a934e000122030405000006"), "key": 6, "found": false }

Tal vez, también sería más limpio poner found como verdadero para todas las coincidencias positivas.

O... tal vez devuelva un subarreglo de los que no coinciden (que podría ser más limpio en el procesamiento posterior)

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No hay una forma directa de hacer esto en MongoDB. Puede probar la consulta de agregación para manejar los requisitos personalizados.

Aquí he agregado una consulta de agregación para lograr su requisito, pero no estoy seguro de cuáles son sus datos exactos,

Aporte:

 [ { "key": 1 }, { "key": 2 }, { "key": 3 }, { "key": 4 }, { "key": 50 }, { "key": 6 }, { "key": 7 } ]
  • $match su $in condiciones
  • $facet para separar resultados y números no encontrados
  • la clave de result es obtener los resultados del documento final
  • notFound es encontrar las claves no encontradas
  • $group por nulo y obtener claves únicas del resultado usando $addToSet
  • $setDifference para obtener la diferencia de dos matrices, primero es su entrada y el segundo número de resultado disponible
  • $project para mostrar los campos obligatorios
 db.collection.aggregate([ { $match: { key: { $in: [1, 3, 5, 7] } } }, { $facet: { result: [], notFound: [ { $group: { _id: null, key: { $addToSet: "$key" } } }, { $project: { key: { $setDifference: [[1, 3, 5, 7], "$key"] } } } ] } } ])

Patio de juegos

Resultado:

 [ { "notFound": [ { "key": [5] } ], "result": [ { "key": 1 }, { "key": 3 }, { "key": 7 } ] } ]

El segundo enfoque , según su muestra de resultados esperados,

  • $addFields para agregar un nuevo campo found
  • $in para verificar que la key tiene valor en la matriz proporcionada, si es así, devuelva verdadero, de lo contrario, falso
 db.collection.aggregate([ { $addFields: { found: { $in: ["$key", [1, 3, 5, 7]] } } } ])

Patio de juegos

Resultado:

 [ { "key": 1, "found": true }, { "key": 2, "found": false }, { "key": 3, "found": true }, { "key": 4, "found": false }, { "key": 50,"found": false }, { "key": 6, "found": false }, { "key": 7, "found": true } ]
about 4 years ago · Juan Pablo Isaza 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