You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:46:11