MongoDB聚合$sample与$match顺序错误,无法获取指定数量随机男性用户
问题原因及解决方法
你的聚合查询阶段顺序错误,导致无法保证返回3个男性用户。
错误逻辑分析
当前查询的执行顺序是:
$sample: { size: 3 }:从整个users集合的12个文档中随机选取3个$match: { gender: "m" }:从这3个随机文档里筛选出性别为男性的记录
因为随机选的3个文档里可能包含女性,所以最终返回的男性数量是随机的(0-3个),无法保证恰好3个。
正确的查询写法
需要先筛选出所有男性用户,再从中随机选取3个,调整聚合阶段的顺序:
db.users.aggregate([ { $match: { gender: "m" } }, { $sample: { size: 3 } } ])
额外注意点
你的插入语句中,will的文档存在语法错误:
db.users.insert({"name":"will","gender":"m, "age": 20"});
这里的gender字段值引号未正确闭合,会导致该文档的gender值为"m, "age": 20"(而非"m"),这条数据不会被$match: { gender: "m" }匹配到。需要修正为:
db.users.insert({"name":"will","gender":"m", "age": 20});
修正后男性用户数量才是6个,确保$sample能取到3个男性。
内容的提问来源于stack exchange,提问作者oderfla
相关产品推荐
相关产品推荐

