Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数千个mongodb文档中进行计算最有效的方法是什么?_Php_Mongodb_Mongodb Query - Fatal编程技术网

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

Php 在数千个mongodb文档中进行计算最有效的方法是什么?,php,mongodb,mongodb-query,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",

我有一个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"
}
对于每个日期,我都有大约4.4万份文档。比如说,我想找出具有相同kwId但不同日期的文档(如2017-01-28和2017-01-27)的p1和p2值的差异。示例结果:

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

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

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

我意识到正确的方法是使用PHP进行计算。首先,我改变了结构。我将kwId和日期都设置为id。 原因有二

  • kwId和date都使文档具有唯一性
  • 我正在按kwId和日期查询文档。因此,必须对它们进行索引,以加快进程

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


  • 在我的问题中,我说“我试过的是,检索给定日期的所有文档,并用PHP计算差异。这相当慢。”。完成这一过程大约需要50分钟。在对我上面提到的文档结构做了一些更改之后,使用二进制搜索代替php的默认搜索函数,现在我只需等待几毫秒。

    聚合框架在这里非常理想,至少如果您将
    p1
    p2
    数据类型改为
    Number
    ,而不是字符串。