比较MongoDB中的文档

时间:2012-02-01 22:28:13

标签: php mongodb

我希望比较mongo集合中可能数百万个文档之间的字段。这些字段将提前确定,并且权重将给予每个字段。然后,这些权重将用于返回表示“喜欢”文档的建议的文档对。例如,如果正在比较2个文档并且两个文件的字段'first_name'具有相同的值,则将引用权重表,并且该对的分数将添加该权重。如果两者之间的另一个字段相同,则分数将更新以反映更高的相似度。

我正在通过迭代初始结果集来接近它,然后进行嵌入式迭代,该迭代也遍历结果集并将每个文档与第一个迭代器所在的文档进行比较(效率极低)。目前这一切都是由php完成的,因为它通过游标抓取元素。

我愿意接受任何建议,包括MapReduce实现(实际上看起来并不适用),光标操作,几乎可以用来简化整个过程,因为我现在正处于O(n ^ 2)复杂度(好吧,稍微好一点,因为我跳过了第一个迭代器到目前为止所覆盖的文档。

1 个答案:

答案 0 :(得分:0)

为了避免n ^ 2,您必须查看在参考集合中存储字段及其值,例如:

{
    field: "firstName",
    value: "Remon",
    documents : [ <list with all document _ids of documents that have "field" set to "value">]
}

通过这种方式,您可以直接查询此集合,以获取与您的源文档“相似”的所有文档。此外,这允许您使用单个O(n)查询查询多个键/值对。

显然唯一棘手的事情是首先维护这个引用集合,但在你的情况下看起来非常简单(更新字段时更新引用)。

这有帮助吗?