Mongoose查询如何仅返回相同title记录中的任意一条
Mongoose 按title字段去重查询实现方案
要实现相同title仅返回任意一条记录的需求,可直接使用Mongoose的aggregate聚合管道完成,核心逻辑是通过$group分组阶段按title字段去重,再提取单条记录的字段即可。
完整查询示例
// 将下方YourModel替换为你自己实际使用的集合模型 YourModel.aggregate([ // 按title分组,每组取第一条完整记录存入doc字段,也可替换为$last取每组最后一条 { $group: { _id: "$title", doc: { $first: "$$ROOT" } } }, // 将doc字段的内容提升为根级返回结果,无需手动拆解字段 { $replaceRoot: { newRoot: "$doc" } }, // 可选阶段:按需对最终返回结果排序,示例为按创建时间倒序 { $sort: { createdAt: -1 } } ]) .then(res => console.log(res)) .catch(err => console.error(err))
自定义返回字段方案
如果你不需要返回整条记录,只需要指定的几个字段,可以修改$group阶段的配置,无需使用$$ROOT:
{ $group: { _id: "$title", recordId: { $first: "$_id" }, content: { $first: "$content" }, createTime: { $first: "$createdAt" } } }
如果需要优先返回同组内符合特定规则的记录,比如最新创建的,可以在$group阶段前增加$sort阶段,先按创建时间倒序排列,再用$first即可拿到每组最新的记录。
内容的提问来源于stack exchange,提问作者Oğuzhan KAYA
相关产品推荐
相关产品推荐

