如何在Mongoose中从Product模型/路由获取关联Product的用户列表或数量
解答
完全可以从Product模型侧完成这个需求,不需要依赖User侧的逻辑,以下是两种常见场景的实现方案:
仅需要获取关联过商品的用户ID列表/统计数量
直接调用Mongoose的distinct方法即可,该方法会自动对指定字段去重,返回所有不重复的关联用户ID:// 获取所有关联过商品的用户ID数组 const relatedUserIds = await Product.distinct('user') // 直接得到关联用户数量 const relatedUserCount = relatedUserIds.length该方法性能较高,适合只需要ID或者仅做数量统计的场景。
需要获取关联用户的完整文档信息
可以使用Mongoose聚合管道,先对用户ID去重,再关联User表拉取完整用户数据:const relatedUsers = await Product.aggregate([ // 按user字段分组去重,得到所有关联过商品的用户ID { $group: { _id: '$user' } }, // 关联User集合拉取用户完整信息 { $lookup: { from: 'users', // 此处为User模型对应的MongoDB集合名,默认是模型名小写加s localField: '_id', foreignField: '_id', as: 'userInfo' } }, // 拆分数组,同时自动过滤掉已删除、关联不到的无效用户 { $unwind: '$userInfo' }, // 调整返回结构,直接返回用户数据 { $replaceRoot: { newRoot: '$userInfo' } } ]) // 统计关联有效用户数量直接取 relatedUsers.length 即可
注意:如果你的业务存在用户删除但关联商品未同步删除的情况,第一种方案返回的ID列表会包含已删除用户的无效ID,需要过滤无效用户的话推荐使用第二种方案。
内容的提问来源于stack exchange,提问作者john otor
相关产品推荐
相关产品推荐

