简体   繁体   中英

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...

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM