This is one doc in my "Assets" collection.
{
...
category: "categoryName"
name: "assetName",
weight: 400,
...
}
I need to filter by "name" or "weight" and this is what I do in NodeJS
...(filter) && {
$or: [
{ name: { "$regex": filter, "$options": "i" } }
{ weight: +filter } // filter is string
]
}
I get the following error because weight
in my model
is of type Number
and I don't want to change that.
CastError: Cast to Number failed for value "NaN" (type number) at path "weight"
what would be the best way to handle this?
Just construct the condition dynamically, you're already doing most of the work:
...(filter) && {
$or: [
{ name: { "$regex": filter, "$options": "i" } }
// some condition that will always return false when is filter is NaN
( isNaN(filter) ? { name: "Does not exist" } : { weight: +filter })
]
}