如何通过MongoDB查询替代外部循环实现多字段精准匹配?
解决MongoDB多字段成对匹配查询问题
你原来的查询用$in分别匹配questionId和submissionCount,会把所有满足「questionId是1/2 且 submissionCount是1/2」的文档都查出来,这就包含了你不需要的questionId=1且submissionCount=1的记录。要实现字段成对匹配的需求,直接用$or把每组对应条件包起来就行:
正确的查询语句
let history = await this.dbCollection .find({ userId: 1, attemptNum: 2, $or: [ { questionId: 1, submissionCount: 2 }, { questionId: 2, submissionCount: 1 } ] }) .lean();
说明
$or里的每个对象都是一组精确的成对条件,要么是questionId=1且submissionCount=2,要么是questionId=2且submissionCount=1- 外层的
userId和attemptNum是全局过滤条件,不需要额外嵌套$and(MongoDB默认多个查询条件为逻辑与关系)
这样查询出来的结果就是你预期的两条记录,无需再做外部循环过滤。
内容的提问来源于stack exchange,提问作者CodeBug
相关产品推荐
相关产品推荐

