Mongoose如何提取MongoDB文档对象数组中所有符合条件的元素
原因说明
你使用的$elemMatch投影运算符本身的设计限制就是仅返回数组中第一个匹配条件的元素,因此无法提取全部符合要求的对象。要实现需求需要使用MongoDB聚合管道搭配$filter数组运算符处理。
正确实现代码(Mongoose 环境)
const filterResult = await Movie.aggregate([ // 第一步:筛选movieId为333的目标文档 { $match: { "movieDetails.movieId": 333 } }, // 第二步:过滤Dates数组,保留所有TheaterId等于12的元素 { $project: { _id: 0, // 关闭默认_id字段返回,不需要可以删除 Dates: { $filter: { input: "$Dates", // 指定要过滤的数组字段 as: "item", // 定义数组遍历的临时变量名 cond: { $eq: ["$$item.TheaterId", 12] } // 过滤条件 } } } } ]) // 提取最终的匹配数组,若没有匹配文档返回空数组 const targetDates = filterResult[0]?.Dates || []
结果验证
上述代码返回的targetDates就是你需要的全部匹配对象数组,结构和你给出的预期返回完全一致。
内容的提问来源于stack exchange,提问作者haim brandesdorfer
相关产品推荐
相关产品推荐

