如何使用MongoDB操作符合并两个Mongoose查询语句?
合并后查询代码
你的两个查询逻辑是匹配「对方发送给你的邮件」和「你发送给对方的非offer类邮件」,直接用$or把两组查询条件包裹即可,合并后的写法如下:
const allMailContent = await Mail.find({ $or: [ // 对应原第一个查询:对方发件、我在收件人列表中 { sender: id, receivers: { $elemMatch: { $eq: req.user._id } } }, // 对应原第二个查询:我发件、对方在收件人列表中、邮件类型不是offer { sender: req.user._id, receivers: { $elemMatch: { $eq: id } }, type: { $not: { $eq: 'offer' } } } ] }).populate('sender');
可选简化写法
MongoDB原生支持直接匹配数组包含指定值的场景,同时{$not:{$eq: 'offer'}}可以简写为$ne操作符,简化后代码更简洁:
const allMailContent = await Mail.find({ $or: [ { sender: id, receivers: req.user._id }, { sender: req.user._id, receivers: id, type: { $ne: 'offer' } } ] }).populate('sender');
内容的提问来源于stack exchange,提问作者user15344186
相关产品推荐
相关产品推荐

