将 MongoDB 聚合函数与 $in 或 $nin 结合使用

Combine MonogDB aggregate function with $in or $nin

我正在尝试使用 MongoDB 查询来查询数据,该查询结合了 $match 和 $nin 运算符:

coll = mdb.get_collection_by_name('Client')
query = [
    {"$group": {"_id": {"Domain": "$Domain"}, "count":{"$sum":1}}},
    {"$match": { "UserName": { "$nin": excluded_users}}},
    {"$sort": { "count": -1 } }
]

res = list(coll.aggregate(query))
print(res)

看起来,MongoDB 忽略了我的 $match 行并计算也包含 excluded users 的记录。我试图搜索类似的示例,但没有找到将 $match 与 $in 或 $nin 组合在一起的查询。支持吗? 难道我做错了什么?将聚合查询与 $nin 或 $in 运算符相结合的最佳方式是什么? 谢谢

$group 步骤删除所有未明确说明的字段。这意味着到达 $match 阶段的文档只有字段 _idcount。不再有可以匹配的字段 UserName。如果您想按 UserName 过滤,您需要确保 UserName 也是 $group 生成的文档的一部分。

因为$group将多个文档压缩成一个,你需要指定如果多个分组文档对UserName有不同的值时如何处理。选项是 $last/$first 以使用 last/first 聚合文档的值(警告:在 $group 之前没有明确的 $sort,顺序是不可预测的), $addToSet 创建所有唯一值的数组或 $push 创建所有重复值的数组。

但是,您可能希望在 对文档进行分组之前 过滤掉不需要的文档,因此更好的解决方案可能是将 $match 移动到 $group.