MongoDB 典型用途

MongoDB typical use

我是 MongoDB 的初学者,所以我有几个问题。首先我的代码是用PHP写的。我的使用上下文如下:

{
    "_id": "58c91c8059b0a500083dab0c",
    "year": "2017",
    "month": "03",
    "day": "15",
    "data": {
        "key-1": "value-1",
        "key-2": "value-2",
        "key-n": "value-n"
    }
}

我想获取所有具有特定键的文档并对它们的值求和。所以我使用了这段代码:

$manager = new \MongoDB\Driver\Manager( MONGO_SERVER );

$filter = array ( 
    "year" => $_POST['time_year'], 
    "month" => $_POST['time_month'], 
    "day" => $_POST['time_day']
);

$options = [
    'projection' => ['_id' => 0],
];

$query = new \MongoDB\Driver\Query($filter, $options);
$rows = $manager->executeQuery('REPORT.xxxxxxx', $query);

foreach ($rows as $entry) {
    [..]
}

但是我收到了这个错误:

Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes)

所以,从这个问题我有这个问题:

  1. 使用 MapReduce 可以避免这个问题吗?
    • 我研究了一些使用 PHP 的 MapReduce 示例,但每个示例都使用了 MongoCode。通过一些研究,我发现 class MongoCode 已被弃用,而且别无选择。
    • 有没有其他方法可以得到相同的结果(MongoDB\Driver)?
  2. PHP 是最适合使用的语言 MongoDB 吗? Node.js 可能是更好的选择?
  3. 添加更多文件(每天 80,000 个):这对 MongoDB 来说可能是个问题吗?

您 运行 遇到了 MongoDB 的内存池问题,以及如何控制它。这是根据您的系统以多种方式完成的。

然而,即使在此之前,您也是从 PHP 的角度来处理代码的。我认为您应该看一看并掌握 $aggregate $unwind 和其他类似的 MongoDB 数据操作函数。

建议:花一些时间了解和配置 mongod.conf 文件,并了解这些选项对您的系统意味着什么。然后花时间查看 Mongo 使用文档检索数据的方式之间的差异。

至于最好的语言mongo..你可能会得到很多答案。 Node.js 驱动程序由 Mongo 正式支持,并且 Mongo 从一开始就一直在使用 Node.js。 (认为​​ PHP To MySQL 与 Node.js To MongoDB 相同)。虽然我相信很多人会反对这个类比。 但作为一名 PHP 程序员,我绝不会想到将 PHP 与 Mongo 一起使用。据我在过去 2 年的观察和观察,Node 简直是 Mongo 的天然伙伴。