在数千个mongodb文档中进行计算的最有效方法是什么?

时间:2017-01-28 09:51:39

标签: php mongodb mongodb-query

我有一个mongo集合。我的收藏可以这样考虑:

{
    "kwId" : "123445",
    "p1": "15"
    "p2": "25",
    "date": "2017-01-28"
}

{
    "kwId" : "123446",
    "p1": "25"
    "p2": "30",
    "date": "2017-01-28"
}

{
    "kwId" : "123445",
    "p1": "35"
    "p2": "40",
    "date": "2017-01-27"
}

{
    "kwId" : "123446",
    "p1": "30"
    "p2": "50",
    "date": "2017-01-27"
}

对于每个日期,我有大约44,000个文件。让我们说,我想找到具有相同kwId但不同日期的文件的p1和p2值的差异,例如2017-01-28和2017-01-27。示例结果:

{
    "kwId" : "123445",
    "p1": "20"
    "p2": "15",
}

{
    "kwId" : "123446",
    "p1": "5"
    "p2": "20",
}

最有效的方法是什么?我正在使用PHP和我尝试的是,检索给定日期的所有文档并计算PHP中的差异。这很慢。

1 个答案:

答案 0 :(得分:1)

我意识到正确的方法是用PHP进行计算。首先,我改变了结构。我做了kwId和日期 id 。 这有两个原因。

  1. kwId和date都使文档独一无二。
  2. 我用kwId和date查询文件。所以必须将它们编入索引以加快这一过程。

    {   “ID”: {     “kwId”:123445,     “日期”:“2017-01-28”   },   “p1”:“15”,   “p2”:“25” }

  3. 在我的问题中,我说“我已经尝试过,检索给定日期的所有文件并计算PHP的差异。这非常慢。”完成流程需要大约50分钟。如上所述,在文档结构稍有变化之后,使用二进制搜索而不是php的默认搜索功能,现在我只需等待几毫秒。