【问题标题】:Comparing documents within MongoDB比较 MongoDB 中的文档
【发布时间】:2012-02-01 22:28:13
【问题描述】:

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

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

我愿意接受任何建议,包括 MapReduce 实现(似乎并不真正适用)、光标操作,以及几乎任何你能想到的简化流程的方法,因为我现在在 O(n^2) 复杂度下工作(好一点,因为我跳过了第一个迭代器到目前为止已经涵盖的文档。

【问题讨论】:

    标签: php mongodb


    【解决方案1】:

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

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

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

    显然,唯一棘手的事情是首先维护此引用集合,但在您的情况下,这似乎很简单(更新字段时更新引用)。

    这有帮助吗?

    【讨论】:

    • 我也考虑过创建一个非常相似的设置,并希望避免创建额外的要维护的集合,但这看起来更像是我必须走的路线。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多