Почему findOne ($ query) работает с коллекцией и find ($ query) не использует PHP-драйвер Mongo? - PullRequest
4 голосов
/ 11 декабря 2010

Я использую PHP для общения с Mongo, используя findOne($query) на db.collection, он возвращает результат, как я и ожидал.Но изменение этой команды для find () ничего не возвращает.

Из оболочки, если вы используете db.collection.find (), она возвращает все документы.Может кто-нибудь объяснить, почему драйвер find() PHP не будет возвращать результаты, даже если findOne() при использовании точно такого же запроса?

ОБНОВЛЕНИЕ: Вот код.

find() (не работает):

  $db = $connection->selectDB( $database );
  $returned_collection = $db->selectCollection( $collection );
  $cursor = $returned_collection->find( $query );

);

find() отладочный вывод:

query: array(1) {
  ["user_id"]=>
  string(13) "4d03d13b71676"
}
1292099894 > mongo_wrapper.class.php > returned_collection: events.votes 
db: object(MongoDB)#41 (2) {
  ["w"]=>
  int(1)
  ["wtimeout"]=>
  int(10000)
}
cursor: object(MongoCursor)#43 (0) {
}

findOne() (работает):

  $db = $connection->selectDB( $database );
  $returned_collection = $db->selectCollection( $collection );
  $cursor = $returned_collection->findOne( $query );

findOne() выходные данные отладки:

query: array(1) {
  ["user_id"]=>
  string(13) "4d03d13b71676"
}
1292099906 > mongo_wrapper.class.php > returned_collection: events.votes 
db: object(MongoDB)#7862 (2) {
  ["w"]=>
  int(1)
  ["wtimeout"]=>
  int(10000)
}
cursor: array(7) {
  ["_id"]=>
  object(MongoId)#7849 (1) {
    ["$id"]=>
    string(24) "4d03d842d0645afaab4e92f6"
  }
  ["user_id"]=>
  string(13) "4d03d13b71676"
  ["timestamp"]=>
  int(1292095809)
  ["context"]=>
  string(3) "ms3"
  ["uri"]=>
  string(120) "http://feeds.marketwatch.com/~r/marketwatch/podcasts/MarketwatchStupidInvestmentOfTheWeek/~3/3H-tMQLS9AA/siotw103009.mp3"
  ["type"]=>
  string(8) "category"
  ["vote"]=>
  int(-1)
}

Оба используют этот код отладки:

    if($debug->enabled) {
        echo time() . " > mongo_wrapper.class.php > returned_collection: $returned_collection \n";
        if($debug->dump) {
            echo "db: ";
            var_dump( $db );
            echo "cursor: ";
            var_dump( $cursor );
        }
    }

1 Ответ

3 голосов
/ 11 декабря 2010
<code><?php

$connection = new Mongo();

$db = $connection->database;

$collection = $db->collection;

echo '<pre>';

print_r($collection->findOne());

$cursor = $collection->find();
foreach ($cursor as $id => $value) {
    echo "$id: ";
    print_r($value);
}

echo '
'; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...