如何让MongoDB aggregate配合$match始终返回指定数量符合条件的随机文档
解决方法
MongoDB 聚合管道的执行顺序和阶段的书写顺序完全一致,你原有写法的问题在于先从全量文档随机抽取5条再做状态过滤,不符合条件的条目会被筛除,自然会出现最终结果不足5条的问题,只需要调换$match和$sample两个阶段的顺序即可。
修正后的代码如下:
app.get('/feed', (req, res) => { TFBlog.aggregate([ // 第一步:先过滤出所有已发布的文档 { $match: {"published": true} }, // 第二步:从符合条件的文档中随机抽取5条 { $sample: {size: 5} } ]).then((docs)=>{ // 可选补充:如果存在符合条件的总文档数不足5的场景,可在此处加兜底逻辑 // if (docs.length < 5) { 执行你的兜底处理 } res.render('explore',{docs:docs}); }); });
只要你的集合中published为true的文档总数量≥5,该写法就会稳定返回5条符合要求的随机结果。
内容的提问来源于stack exchange,提问作者Tejas Shirnalkar
相关产品推荐
相关产品推荐

