这是搜索记录:
A = {
field1: value1,
field2: value2,
...
fieldN: valueN
}
我在数据库中有很多这样的记录。
如果这些记录中的偶数N-M字段相等,则其他记录(B)几乎与记录A匹配。这是一个例子,M = 2:
B = {
field1: OTHER_value1,
field2: OTHER_value2,
field3: value3,
...
fieldN: valueN
}
它可以是任何领域,而不仅仅是第一个领域。
P.S。:我已经为postgresql复制了相同的查询 - How to find almost similar records in sql?,现在我想用mongodb做这个。
答案 0 :(得分:0)
我的解决方案:
db.col.aggregate(
[
{
$addFields:
{
nonMatchCount: 0
}
},
{
$addFields: {
nonMatchCount:
{
$cond: [{$eq: ['$field1', 'OTHER_value1']}, '$nonMatchCount', {$sum: ['$nonMatchCount', 1]}]
}
}
},
{
$addFields: {
nonMatchCount:
{
$cond: [{$eq: ['$field2', 'OTHER_value2']}, '$nonMatchCount', {$sum: ['$nonMatchCount', 1]}]
}
}
},
{
$addFields: {
nonMatchCount:
{
$cond: [{$eq: ['$field3', 'value3']}, '$nonMatchCount', {$sum: ['$nonMatchCount', 1]}]
}
}
},
...
{
$addFields: {
nonMatchCount:
{
$cond: [{$eq: ['$fieldN', 'valueN']}, '$nonMatchCount', {$sum: ['$nonMatchCount', 1]}]
}
}
},
{$match: { nonMatchCount: {$lte: 2}}}
]
);