我有一个XAMPP 1.7.3实例运行和在同一台机器上的MongoDB的1.2.4服务器。

我想将它们连接起来,所以我基本上一直在关注本教程上php.net,它似乎连接,但光标总是空的。我不知道我错过了什么。

下面是我想要的代码。该CURSOR->有效总是说假的。感谢

<?php
$m = new Mongo(); // connect
try {
  $m->connect();
} catch (MongoConnectionException $ex) {
  echo $ex;
}
echo "conecta...";
$dbs = $m->listDBs();
if ($dbs == NULL) {
  echo $m->lastError();
  return;
}
foreach($dbs as $db) {
  echo $db;
}

$db = $m->selectDB("CDO");
echo "elige bd...";
$col = $db->selectCollection("rep_consulta");
echo "elige col...";

$rangeQuery = array('id' => array( '$gt' => 100));
$col->insert(array('id' => 456745764, 'nombre' => 'cosa'));
$cursor = $col->find()->limit(10);
echo "buscando...";
var_dump($cursor);
var_dump($cursor->valid());
if ($cursor == NULL) echo 'cursor null';
while($cursor->hasNext()) {
    $item = $cursor->current();
    echo "en while...";
    echo $item["nombre"].'...';
}

?>

通过命令行这样运行完美

use CDO
db.rep_consulta.find()
-- lot of data here
有帮助吗?

解决方案

当迭代您不前进光标的查询的结果。运行上面的代码,因为游标没有被推进导致一个无限循环。尝试改变:

$item = $cursor->current();

$item = $cursor->getNext();

就个人而言,我更喜欢这个语法:

foreach ($cursor as $item)
{
    var_dump($item);
}

修改

下面的代码工作正常我。你可以尝试一下吗?

$m = new Mongo();

$db = $m->CDO;
$col = $db->rep_consulta;

$col->insert(array('id' => 456745764, 'nombre' => 'cosa'));

$cursor = $col->find()->limit(10);

foreach ($cursor as $item)
{
    var_dump($item);
}

修改++

顺便说一句,$ CURSOR->有效的(),直到你向前移动光标到结果的第一项将不会返回true。这就是为什么你得到错误的。您还没有向前移动光标在你的代码这一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top