Tengo una colección de documentos Mongo db que contiene _id, id1, id2, donde (id1, id2) son únicos juntos. Quiero encontrar todos los documentos excepto una lista de diccionarios de (id1, id2).
En otras palabras, quiero todos los documentos excepto except_arr.
Ejemplo de los documentos:
{ _id: 1, id1: 25, id2: 1030 }, { _id: 2, id1: 25, id2: 1031 }, { _id: 3, id1: 1024, id2: 2048 }, { _id: 4, id1: 1552, id2: 1284 }Ejemplo de la matriz a exceptuar:
except_arr = [ {id1: 1024, id2: 2048}, {id1: 1552, id: 1284} ]El resultado debería ser:
{ _id: 1, id1: 25, id2: 1030 }, { _id: 2, id1: 25, id2: 1031 }Después de revisar el código que he comentado y ver lo que dijo Mohamad, obtuve esta solución:
db.getCollection('test').find({ $or: [ { id1: { $nin: [1024, 1552] } }, { id2: { $nin: [2048, 1284] } } ] })Mis objetos de base de datos:
[ { _id: 1, id1: 25, id2: 1030 }, { _id: 2, id1: 25, id2: 1031 }, { _id: 3, id1: 1024, id2: 2048 }, { _id: 4, id1: 1552, id2: 1284 }, { _id: 5, id1: 1024, id2: 3 }, { _id: 6, id1: 4, id2: 1284 } ]El resultado:
[ { _id: 1, id1: 25, id2: 1030 }, { _id: 2, id1: 25, id2: 1031 }, { _id: 5, id1: 1024, id2: 3 }, { _id: 6, id1: 4, id2: 1284 } ] EDITAR
Debajo de un ejemplo con diferentes id1 e id2
*Área de juegos en línea para probar: https://mongoplayground.net/p/2vQyTkpgHNI
Mi colección: 