charliebrownie
charliebrownie

Reputation: 6097

Mongoose - find(): object inside search options is not working

I have a mongoose Schema that looks like this:

var mySchema = new mongoose.Schema({
  ...
  metadata: {
    isDeleted: {
      type: Boolean,
      default: false
    },
    ...
  }
});

I want to get the list of elements in my mongodb database applying a filter, so I have the following object:

var searchOptions = { metadata: { isDeleted: false } };

that always needs to have that metadata.isDeleted value set to false, appart from other parameters that will be added later, before executing the query:

var objQuery = myModel.find(searchOptions, '-metadata');

At first, I had isDeleted attribute outside my metadata object in the Schema, and

var searchOptions = { isDeleted: false };

used to work perfectly. But it is since I decided to have isDeleted inside my metadata object that is not working and can't figure out why...

Upvotes: 3

Views: 3295

Answers (1)

Blakes Seven
Blakes Seven

Reputation: 50406

It seems pretty likely given your use of elipsis in your schema listing that there are more properties than isDeleted under the metadata property. So your object should be:

var searchOptions = { "metadata.isDeleted": false } };

The reason for this is that otherwise the query is looking for a document with "exactly" and "only" the properties named under the metadata key:

var searchOptions = { metadata: { isDeleted: false } };

And when that is not the case, then of course there is no match.

Upvotes: 7

Related Questions