MongoDB按创建者分组查询指定用户是否浏览其全部作品的实现方法
MongoDB 按创建人分组统计全部浏览状态实现方案
直接使用以下3步的聚合管道即可实现需求,核心逻辑是先标记单条故事的浏览状态,再按创建人分组校验所有状态是否全部为已浏览:
// 替换your_story_collection为你的实际集合名,requestUser可作为变量动态传入请求用户 const requestUser = "user3"; db.your_story_collection.aggregate([ // 第一步:给每条故事新增标记位,判断是否被请求用户浏览过 { $addFields: { isViewed: { $in: [requestUser, "$viewers"] } } }, // 第二步:按创建人分组,直接计算全量浏览状态 // 用$min是因为MongoDB中布尔值false < true,只要有一个未浏览,最小值就是false { $group: { _id: "$createdBy", isAllViewed: { $min: "$isViewed" } } }, // 第三步:输出要求的格式,隐藏多余字段 { $project: { _id: 0, createdBy: "$_id", isAllViewed: 1 } } ])
如果需要排除请求用户自己发布的故事,可在管道最开头增加过滤阶段:{$match: {createdBy: {$ne: requestUser}}}
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

