如何在mongodb中找到几乎相似的记录?

时间:2018-01-11 09:48:01

标签: mongodb algorithm similarity

这是搜索记录:

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做这个。

1 个答案:

答案 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}}}
   ]
);