I have a Mongo db collection of documents which contains _id , id1, id2, where (id1, id2) are unique together. I want to find all the documents except a list of dictionaries of (id1, id2).
In other words, I want all the documents except the except_arr.
Example of the documents:
{ _id: 1, id1: 25, id2: 1030 },
{ _id: 2, id1: 25, id2: 1031 },
{ _id: 3, id1: 1024, id2: 2048 },
{ _id: 4, id1: 1552, id2: 1284 }
Example of the array to except:
except_arr = [
{id1: 1024, id2: 2048},
{id1: 1552, id: 1284}
]
The result should be:
{ _id: 1, id1: 25, id2: 1030 },
{ _id: 2, id1: 25, id2: 1031 }
After reviewing the code I've commented and see what Mohamad said I got this solution:
db.getCollection('test').find({
$or: [
{ id1: { $nin: [1024, 1552] } },
{ id2: { $nin: [2048, 1284] } }
]
})
My database objects:
[
{ _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 }
]
The result:
[
{ _id: 1, id1: 25, id2: 1030 },
{ _id: 2, id1: 25, id2: 1031 },
{ _id: 5, id1: 1024, id2: 3 },
{ _id: 6, id1: 4, id2: 1284 }
]
EDIT
Below a example with different id1 and id2
*Online playground to test: https://mongoplayground.net/p/2vQyTkpgHNI
My collection:
