Ben Denger
Ben Denger

Reputation: 248

mongo db query check that no other document with matched values exist

I want to create a query with which I can check if a document has related documents, e.g. I have a document

{
name:"test1", 
status:"CREATED"
date:"2018-12-12"
user:"foo"
}

and i want to retreive all documents where the user has no document with status:"OPEN"

I had the idea to project a field with the number of documents which are open for the user & day and filter for 0, but I don't know how I could do that.

So when i have the following documents:

enter image description here

it should only return foo2 and foo4 because foo, foo3 and foo5 already have documents with status:"OPEN"

Upvotes: 0

Views: 1140

Answers (2)

lprakashv
lprakashv

Reputation: 1159

Please find the below code to get all the documents for users for whom no 'OPEN' status exists:

db.collection.find({
  user: {
    $nin: db.collection.find({status: 'OPEN'}).map((row) => row.user)
  }
});
  • $nin: to specify and exclusion list.
  • .map((row) => row.user): to convert array of filtered documents to array of just the string containing user ids.

Upvotes: 2

Faiz Khan
Faiz Khan

Reputation: 298

Here is the logic:

1.First query all the doc with status OPEN

2.Now you have a sets of data with OPEN only doc

4.Now create a query where you pass all the userId of this set in query and fetch those values from collection which have userId not equal to the passed ones

Example:

db.collectionName.find({status:'OPEN'});// set1


db.collectionName.find({userId:{$not : 'userid1'}},{userId:{$not : 'userid2'}},....);

This is not good code but this is all you can do now or add some other fields in db to do it more effectively

Upvotes: 0

Related Questions