如何将文档数组属性作为参数列表传入$setEquals等MongoDB聚合运算符?
最优实现方案
推荐使用 $map + $allElementsTrue 的组合实现,代码更简洁易读,性能和reduce方案一致:
{ $project: { allSubarraysEqual: { $allElementsTrue: { $map: { input: "$myLists", in: { $setEquals: [ "$$this", { $arrayElemAt: [ "$myLists", 0 ] } ] } } } } } }
方案说明
- 先取
myLists的第一个子数组作为比对基准 - 用
$map遍历所有子数组,逐一和基准比对是否元素集合相等,得到布尔值数组 - 用
$allElementsTrue判断布尔值数组是否全为true,是则说明所有子数组元素完全相同 - 该方案兼容所有支持聚合运算的MongoDB版本,如果是MongoDB 4.4+版本,可以把
{ $arrayElemAt: [ "$myLists", 0 ] }替换为{ $first: "$myLists" },写法更直观
内容的提问来源于stack exchange,提问作者ammut
相关产品推荐
相关产品推荐

