node.js - 在 Nodejs 中执行动态 mongoDB 查询的最佳方法
问题描述
我有一个变量,可以是字符串数组,也可以是空数组。
const userHospitalQuery = [ req.query.hospital || [] ].flat();
当我将其过滤为字符串数组时,它可以正常工作。当我尝试使用没有任何值或为空的变量(在 url 中没有查询传递)运行我的 mongo 搜索时遇到问题,我如何让 mongo 跳过或忽略它作为过滤器的一部分?所以只有我的其他 2 个过滤器应用于搜索。我知道我不能在查询对象中使用 if 语句,所以我不知道该怎么做
const userHospitalQuery = [req.query.hospital || []].flat();
const filter = {
"staff.hospital": { $in: userHospitalQuery }, // How do i ignore/skip this if no query is passed in the URL
organisation: { $eq: "Test" },
isDeleted: { $eq: false },
};
const staff = await User.find(filter).sort({ dateAdded: -1 });
解决方案
只需使用常规 if 修改过滤器对象。
const userHospitalQuery = [req.query.hospital || []].flat();
const filter = {
organisation: { $eq: "Test" },
isDeleted: { $eq: false },
};
if (userHospitalQuery.length) {
filter["staff.hospital"] = { $in: userHospitalQuery };
}
const staff = await User.find(filter).sort({ dateAdded: -1 });
推荐阅读
- java - 如何通过 Spring WebFlux Reactive 方式在处理程序函数中使用 Mono 和 Flux
- selenium - Selenium highlight working only on one specific machine
- javascript - 无法读取未定义的 React.js 的属性“绑定”
- selenium - 在 Safari 上使用 Selenium 时无法选择要 Airplay 的设备
- sql-server - 处理 sql 时态表和用户定义的数据类型
- python - Tensorflow 在 python shell 中工作,但不在 python 文件中
- queue - Websphere MQ:队列管理器无法连接
- monitoring - 从 influxdb 内部数据库获取指标
- javascript - 使用 window.open 通过“Post”参数打开新窗口
- delphi - 在 Delphi 中取消引用和分配指针的语法