我有以下语法的数据库:
{_id:'342', values:{ A: '432', B: 'asdf', C: '23', D: 'gg'}}
{_id:'343', values:{ A: 's', B: 'fsd', C: 'as', D: '4'}}
{_id:'344', values:{ A: 'f', B: 'f', C: 'af', D: '32'}}
{_id:'345', values:{ A: 'f', B: 'f', C: '333', D: 'adf'}}
给定A,B,C,D的一组值 - 我想找到最相似的文档。
e.g。
给定,{值:{A:'f',B:'f',C:'333',D:'832'}}它将匹配_id:345,因为它具有A,B和C匹配。
我希望获得与我所拥有的值最相似的结果。
是否有可以快速完成此任务的查询/算法?
注意:如果你有一个更好的标题随时可以编辑它,不知道如何标题。
答案 0 :(得分:0)
这是你可以做到的一种方式,假设你希望结果按照接近匹配的顺序并假设只有4(因此可以进行所有排列):
反复使用$ elemMatch(请参阅http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24elemMatch)。
首先查询所有4个值(1个查询) 如果无法查询3个值的每个组合(4个查询) 如果无法查询2个值的每个组合(6个查询) 如果失败则只查询一个匹配(4个查询)。
另一种方法是使用map reduce。如果分数> 1,则在map函数中计算一行的分数。 0将文档ID作为键发出,将得分作为值。在reduce阶段通过单个结果而不做任何工作。按分数对结果进行排序。