首页 > 解决方案 > 在 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 });

标签: node.jsmongodb

解决方案


只需使用常规 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 });


推荐阅读