MongoDB查询问题:如何筛选不在指定分类数组的活跃用户
修正MongoDB查询逻辑:筛选不在指定分类数组的活跃用户
问题原因
你使用$ne运算符传入数组的方式是错误的。$ne的作用是匹配不等于单个特定值的文档,当你传入一个数组时,MongoDB会将category字段的值(单个字符串)和整个数组做比较——显然所有字符串都不等于这个数组,因此所有status: true的用户都被返回了,完全达不到筛选目的。
正确解决方案
要匹配字段值不在指定数组中的文档,需要使用MongoDB的$nin(Not In)运算符,这是专门针对数组范围排除的运算符。
修正后的Go代码
import "go.mongodb.org/mongo-driver/bson" // 构建筛选条件 filter := bson.M{ "status": true, "category": bson.M{"$nin": []string{"it", "medical", "sport"}}, } // 后续执行查询逻辑(例如Find操作) // cursor, err := collection.Find(ctx, filter)
可选的严谨优化
如果你的用户文档中可能存在没有category字段的情况,可以添加$exists: true条件,避免这类无分类的用户被误筛选出来:
filter := bson.M{ "status": true, "category": bson.M{ "$nin": []string{"it", "medical", "sport"}, "$exists": true, }, }
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

