mongodb如何查询给定键至少有N个键的记录?

mongodb how to query records that have at least N key in giving keys?

如何查找与特定记录至少有 N 个相同键的记录?

例如具体记录有k1k2k3k4k5五个键。如何查找比五个键至少 3 个键的记录?

例如当前数据如下,在 k1k2k3k4

中找到至少有 3 个键的文档
doc1 {k2:1, k3:1, k4:1, k5:1, k6:1}
doc2 {k1:1, k3:1, k4:1, k5:1, k7:1}
doc3 {k1:1, k2:1, k4:1, k5:1, k8:1}
doc4 {k1:1, k2:1, k3:1, k5:1}
doc5 {k1:1, k2:1}

预期输出:

doc1 {k2:1, k3:1, k4:1}
doc2 {k1:1, k3:1, k4:1}
doc3 {k1:1, k2:1, k4:1}
doc4 {k1:1, k2:1, k3:1}

您可以在聚合管道中执行以下操作:

  1. 使用$objectToArray$$ROOT文档转换为k-v元组数组
  2. 使用 $reduce 计算字段在 [k1,k2,k3,k4]
  3. 中的数组条目
  4. 仅保留计数 >= 3(或您指定的任何其他阈值)
  5. $project 到您想要的形式

这里有一个Mongo playground供大家参考。