本文介绍使用 mongodb 聚合管道(`$unwind` + `$match` + `$replaceroot` + `$project`)从数组对象中高效提取单个评论的 `likes` 值,适用于已知帖子 `_id` 和评论 `_id` 的精确查询场景。
在 MongoDB 中,当需要从嵌套数组(如 comments)中精准定位并返回某个特定子文档的单一字段值(例如某条评论的 likes 数),仅靠 find() 或 $elemMatch 是不够的——它们只能过滤出包含匹配元素的整个文档,无法直接“扁平化”并投影出目标子字段。
正确解法是采用聚合管道(.aggregate()),分四步完成精准提取:

以下是 Node.js(Mongoose)中的完整实现示例:
const result = await Post.aggregate([
{ $match: { _id: postDataID } },
{ $unwind: "$comments" },
{ $match: { "comments._id": commentDataID } },
{ $replaceRoot: { newRoot: "$comments" } },
{ $project: { likes: 1, _id: 0 } }
]).toArray();
// result 示例:[{ likes: 3 }]
const likeCount = result[0]?.likes || 0;✅ 关键注意事项:
该方案简洁、可读性强,且完全满足「给定帖子 ID 与评论 ID,只返回该评论的点赞数」这一典型业务需求。