I am trying to understand the behaviour of passing an object to findOne when some of the fields are undefined. Even stepping through the nodejs code I don't see it ever directly manipulate undefined fields, but it seems to.
Suppose I have a model like
_id: object id
relationA: object id
relationB: object id
If I do
mymodel.findOne({relationA: id, relationB: undefined})
It will not return results where it satisfies relationA: id. I thought it would just ignore relationB because it is undefined, but I can't tell what it does instead.
Does it
- Convert this to null?
- Convert this to
{$exists: false}? - Is it only special when it is an ObjectId
Thanks
CodePudding user response:
When passing an object with key/values to the findOne function, you are passing a query.
The mongoDb engine search for documents that are matching you query criteria, that is, documents where relationA equals to the value of id AND relationB is undefined (or Null, for that matter).
If you only want to match documents that have relationA equal to some value, remove the relationB part: mymodel.findOne({relationA: id}.
