Mongoose如何查询同时匹配parent字段及列表中任意年月组合的文档?
问题原因分析
你之前使用$elemMatch不生效的核心原因是:$elemMatch是专门用于匹配数组类型字段中的元素的操作符,而你的year和month都是文档顶层的普通数值字段,不存在数组嵌套结构,因此不符合$elemMatch的使用场景。
正确实现方案
你可以使用$or操作符实现多组年月组合的匹配,具体逻辑是先将你的年月组合列表映射为独立的匹配条件,再和parent字段的匹配条件组合即可,代码示例如下:
// 你的年月组合列表 const datePairs = [ { year: 2021, month: 1 }, { year: 2021, month: 0 }, { year: 2020, month: 11 }, { year: 2020, month: 10 } ] // 构造查询条件 const query = { parent: 1, $or: datePairs.map(pair => ({ year: pair.year, month: pair.month })) } // 执行查询 const foundDocuments = await Document.find(query)
结果说明
按照你给出的年月组合列表,上述查询会返回4条符合条件的文档(id为8、9、10、11),你给出的预期输出少了id=11的记录,若确实需要排除该记录,只需把年月组合列表中的{ year: 2020, month: 10 }项删除即可。
内容的提问来源于stack exchange,提问作者indiehjaerta
相关产品推荐
相关产品推荐

