【问题标题】:Not able to pass array as argument inside find method无法在 find 方法中将数组作为参数传递
【发布时间】:2017-01-10 17:54:52
【问题描述】:

我有这个代码:

require_once __DIR__ . "/vendor/autoload.php";

$collection = (new MongoDB\Client)->google_api->threadContents;

$document = $collection->find(["messages.payload.headers.value"=>"kruno@ulix.com"]);
echo "<pre>";
var_dump($document["id"]);

我正在尝试搜索符合特定条件的所有对象。当我使用 findOne 方法时,这完全符合我的要求,但是当我使用 find 方法查找所有对象而不是一个对象时,我得到下一个错误:

致命错误:未捕获的错误:无法使用类型的对象 MongoDB\Driver\Cursor 作为数组在...

【问题讨论】:

  • 您的 find 语句将返回一个游标,该游标将存储在 $document 变量中,您接下来要做什么?向我们展示整个代码。
  • @Vincent 现在我更新了问题,这是完整的代码。
  • @Vincent 我实际上链接了 toArray 方法,现在该行看起来像这样:$document = $collection-&gt;find(["messages.payload.headers.value"=&gt;"kruno@ulix.com"])-&gt;toArray(); 但它真的吃掉了所有的 RAM
  • 是的,这是有效的,尝试使用 foreach 进行迭代,看看是否可行,如果 toArray() 正在耗尽你的内存。

标签: php mongodb php-7 php-mongodb


【解决方案1】:

PHP 的 MongoDB\Driver\Cursor 实现了 Traversable 类,因此您可以使用 foreach 循环遍历结果,但不能像使用 [] 语句的数组那样直接访问它。 这样做,

foreach($document as $fields){
  print_r($fields);
}

【讨论】:

  • 这种方法也会消耗大量内存。大约 200 封邮件需要 9 GB
猜你喜欢
  • 1970-01-01
  • 2020-03-16
  • 2014-03-25
  • 2014-08-29
  • 2010-11-16
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
相关资源
最近更新 更多