1
votes

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 }
2
Can you update your question with an example document? - Haniel Baez
I update my example. Thank you for your response! - MOHAMAD MONZER
try this script: db.getCollection('test').find({id1: { $nin: [1024, 1552] }, id2: { $nin: [2048, 2048] } }) - Glenn Mateus
@GlennMateus this solution won't work because (id1, id2) are unique together. The idea is to find something like $nin : {"$or": [ {'id1': 1024, 'id2': 2048}, {'id1': 1552, 'id2': 1284} ] } - MOHAMAD MONZER

2 Answers

4
votes

What you're looking for is called $nor

db.collection.find({
  $nor: [
    {
      id1: 1024,
      id2: 2048
    },
    {
      id1: 1552,
      id2: 1284
    }
  ]
})

Playground

0
votes

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: Collection

The query result. Query result