基于嵌套对象数组新增布尔字段:寻求更简洁的MongoDB聚合方案
更简洁的MongoDB聚合解决方案
针对你需要根据嵌套数组是否包含指定元素新增布尔字段的需求,可以合并为单个$addFields阶段完成,无需临时字段和后续清理,代码更紧凑:
db.collection.aggregate([ { $addFields: { isFavorited: { $in: [ "6304d72e213e817ee090eb93", // 目标用户ID { $map: { input: "$favorites", as: "item", in: "$$item.user" } } ] } } } ])
原理说明
直接将$map的结果作为$in的第二个参数,省去了临时字段favoritedUserIds的创建与删除步骤,一次聚合阶段完成目标字段的计算。
另一种可选方案:使用$anyElementMatch
如果需要更直观地匹配对象结构(而非提取字段后判断),可以用$anyElementMatch:
db.collection.aggregate([ { $addFields: { isFavorited: { $anyElementMatch: [ "$favorites", { user: "6304d72e213e817ee090eb93" } ] } } } ])
这种方式直接检查favorites数组中是否存在满足user等于指定值的元素,逻辑更贴近业务语义,代码可读性更高。
内容的提问来源于stack exchange,提问作者SuleymanSah
相关产品推荐
相关产品推荐

