MongoDB中如何同时验证user_id存在并获取channel_bookmark长度
解决方案:同时验证用户ID存在性与获取数组长度
你当前的find_one查询会直接过滤掉user_id不在channel_bookmark中的文档,导致无法获取对应数组长度。改用聚合管道可以保留目标文档,同时计算所需的两个结果:
实现代码
pipeline = [ # 匹配指定channel_id的文档,不过滤user_id {"$match": {"channel_id": channel_id}}, # 添加两个计算字段 {"$addFields": { # 判断user_id是否在channel_bookmark数组中 "is_user_bookmarked": {"$in": [user_id, "$channel_bookmark"]}, # 获取channel_bookmark数组的长度 "channel_bookmark_length": {"$size": "$channel_bookmark"} }} ] # 执行聚合并获取单个文档结果 try: data = podcast_collection.aggregate(pipeline).next() except StopIteration: # 无匹配channel_id的文档时返回None data = None
结果说明
- 若存在对应
channel_id的文档,无论user_id是否在channel_bookmark中,都会返回包含以下字段的文档:is_user_bookmarked:布尔值,True表示用户已收藏该频道,False表示未收藏channel_bookmark_length:数字类型,为channel_bookmark数组的总长度
- 若不存在对应
channel_id的文档,data会是None,可根据业务逻辑处理该场景
内容的提问来源于stack exchange,提问作者Farzam Pil Aghaee
相关产品推荐
相关产品推荐

