如何在MongoDB查询中传入条件值实现动态筛选逻辑?
解决方案
你可以通过动态构造查询条件的方式实现需求,不用把所有条件写死在查询语句里。
另外额外提醒:HTTP GET 规范不建议携带请求体,你可以将接口改为 POST 请求,或者把参数放到 query 中传递,避免部分环境下参数取不到的问题。
修正后的代码:
// 建议改成POST请求,适配body传参 router.post("/hotelList", (req, res) => { const { date, boys, girls, isNightParty } = req.body; // 先初始化基础查询条件 const query = { isBlockedOn: { $ne: date } }; // 仅当isNightParty为true时添加夜场允许的过滤条件 if (isNightParty === true) { query.isNightPartyAllowed = true; } // 执行查询 businessUser.find(query) .then((toListHotels) => { return res.status(200).json(toListHotels); }) .catch((err) => { console.log(err); res.status(500).json({ error: '查询失败' }); // 补充错误返回,避免前端超时 }); });
逻辑说明:
- 初始的
query对象只包含所有请求都需要校验的isBlockedOn条件,不管isNightParty传什么都生效。 - 只有当入参
isNightParty严格等于true的时候,才会往查询条件里追加isNightPartyAllowed: true的校验,不满足该条件时就不会校验这个字段,符合你的需求。
内容的提问来源于stack exchange,提问作者Sarfaraz Hasan
相关产品推荐
相关产品推荐

