这是我的"assets资源 "集合中的一个文档.

{
  ...
  category: "categoryName"
  name: "assetName",
  weight: 400,
  ...
}

我需要按"姓名"或"权重"进行筛选,这就是我在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"

处理这件事的最佳方式是什么?

推荐答案

只要动态地构造条件,你已经做了大部分工作:

...(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 }) 
    ]
}

Javascript相关问答推荐

是什么原因导致此Angular 16应用程序中类型错误时属性结果不存在?

警告!合同执行期间遇到错误[执行已恢复](Base Layer 2)

如何将连续的十六进制字符串拆分为以空间分隔的十六进制块,每个十六进制块包含32个二元组?

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

构造HTML表单以使用表单数据创建对象数组

在286之后恢复轮询

我在Django中的视图中遇到多值键错误

单个HTML中的多个HTML文件

创建以键值对为有效负载的Redux Reducer时,基于键的类型检测

当我在Reaction中创建一个输入列表时,我的输入行为异常

Reaction Redux&Quot;在派单错误中检测到状态Mutations

当代码另有说明时,随机放置的圆圈有时会从画布上消失

未捕获的运行时错误:调度程序为空

当我点击一个按钮后按回车键时,如何阻止它再次被点击

Cherrio JS返回父div的所有图像SRC

重新呈现-react -筛选数据过多

使用可配置项目创建网格

如何在Highlihte.js代码区旁边添加行号?

使用静态函数保存 node 前的钩子

调试jQuery代码以获取所有行的总和(票证类型)