Reputation: 6097
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
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