如何在Mongoose中正确查询拥有指定俱乐部有效关联的用户
筛选拥有指定有效俱乐部关联的用户(Mongoose+MongoDB)
你原查询的逻辑错误在于:条件是分别匹配associations数组中的不同子文档——只要用户有任意一个关联是Club A(不管该关联是否有效),同时有任意一个关联是有效的(不管是哪个俱乐部),就会被返回,而非要求同一个关联子文档同时满足「Club A」和「valid为true」。
要实现精准筛选,必须用MongoDB的$elemMatch操作符,它的作用是匹配数组中至少存在一个元素同时满足所有指定条件的文档。
正确查询代码
// 替换xxxxx为Club A对应的ObjectId const targetUsers = await this.model.find({ associations: { $elemMatch: { club: xxxxx, valid: true } } });
关键说明
$elemMatch会遍历每个用户的associations数组,严格检查是否存在某个子文档同时符合club等于目标ID、valid为true两个条件,完全匹配你的需求。- 如果后续需要添加更多子文档筛选条件(比如特定的
number),直接在$elemMatch的对象里追加字段即可。
内容的提问来源于stack exchange,提问作者Faabass
相关产品推荐
相关产品推荐

