mongodb如何查询给定键至少有N个键的记录?
mongodb how to query records that have at least N key in giving keys?
如何查找与特定记录至少有 N
个相同键的记录?
例如具体记录有k1
、k2
、k3
、k4
、k5
五个键。如何查找比五个键至少 3
个键的记录?
例如当前数据如下,在 k1
、k2
、k3
、k4
中找到至少有 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}
您可以在聚合管道中执行以下操作:
- 使用
$objectToArray
将$$ROOT
文档转换为k-v元组数组
- 使用
$reduce
计算字段在 [k1,k2,k3,k4]
中的数组条目
- 仅保留计数 >= 3(或您指定的任何其他阈值)
$project
到您想要的形式
这里有一个Mongo playground供大家参考。
如何查找与特定记录至少有 N
个相同键的记录?
例如具体记录有k1
、k2
、k3
、k4
、k5
五个键。如何查找比五个键至少 3
个键的记录?
例如当前数据如下,在 k1
、k2
、k3
、k4
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}
您可以在聚合管道中执行以下操作:
- 使用
$objectToArray
将$$ROOT
文档转换为k-v元组数组 - 使用
$reduce
计算字段在[k1,k2,k3,k4]
中的数组条目
- 仅保留计数 >= 3(或您指定的任何其他阈值)
$project
到您想要的形式
这里有一个Mongo playground供大家参考。