Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

259
Views
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)

over 4 years ago · Santiago Trujillo
1 answers
Answer question

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 recreo

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 recreo

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 } ]
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!