在Nodejs中执行动态mongoDB查询的最佳方式



我有一个变量,它可以是字符串数组,也可以是空数组。

const userHospitalQuery = [ req.query.hospital || [] ].flat();

当我过滤作为字符串数组时,它工作得很好。我遇到了一个问题,当我试图运行我的mongo搜索变量没有任何值或空(在url中没有查询传递),我如何使mongo跳过或忽略它作为过滤器的一部分?所以只有另外两个过滤器应用于搜索。我知道我不能在我的查询对象中使用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 });

最新更新