Node.js中如何实现Mongoose按ID查询并按指定属性过滤
解决方案
以下是两种常见的实现方案,可根据你的业务需求选择:
场景1:查询阶段直接过滤(性能最优,推荐)
如果要让数据库直接返回_id匹配且language符合要求的文档,不需要先查出全量数据再判断,把原来的findById改为findOne,同时传入_id和language两个查询条件即可:
getRoom: function(req, res) { var roomId = req.params.roomId; var availability = true; var language = 'english'; // 可根据业务逻辑动态修改为'spanish' Room.findOne({ _id: roomId, language: language }).exec((err, room) => { if (err || !room) { return res.status(404).send({ status: 'error', message: 'No existe la habitacion' }); } return res.status(200).send({ status: 'success', room }); }); },
场景2:查询后再做过滤
如果你的业务需要先拿到全量的room数据做其他逻辑,再判断language是否匹配,可以在查询返回后新增一层判断:
getRoom: function(req, res) { var roomId = req.params.roomId; var availability = true; var language = 'english'; Room.findById(roomId).exec((err, room) => { if (err || !room) { return res.status(404).send({ status: 'error', message: 'No existe la habitacion' }); } // 新增language匹配校验 if (room.language !== language) { return res.status(404).send({ status: 'error', message: '当前房间无对应语言版本' }); } return res.status(200).send({ status: 'success', room }); }); },
补充说明:如果你的
language字段存储的是en/es这类简写值,把代码中对应判断的'english'/'spanish'替换为实际存储的字段值即可。
内容的提问来源于stack exchange,提问作者Rafael Hernández
相关产品推荐
相关产品推荐

