微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么findOne($query)在集合上工作并查找($query)不使用PHP的Mongo驱动程序?

我正在使用PHP与Mongo在一个db.collection上使用findOne($query)进行对话,它会返回我期望的结果.但是将该命令更改为find()不会返回任何内容.

从shell中,如果使用db.collection.find(),则返回所有文档.任何人都可以解释为什么即使findOne()在使用完全相同的查询时,PHP驱动程序的find()也不会返回结果?

更新:这是代码.

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 );
        }
    }

解决方法:

<?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 '</pre>';

?>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐