MongoDB在find()上返回空,但在findOne上或者在使用count()时返回内容

时间:2012-06-20 13:44:29

标签: php mongodb

我在工作中使用mongoDB进行新项目,我遇到了一些我找不到任何解决方案的麻烦。我的项目中有一个模型,它包含一个从MongoDB中获取数据的方法,只要我使用findOne()而不是find()就可以正常工作。

方法:

public function getData($input) {

        $output = $this->_collection->find($input);
        //$output = $this->_collection->findOne($input);
        Zend_Debug::Dump($output);
        return $output;
    }

运行那段代码时,我从转储中得到了这个:

object(MongoCursor)#52 (0) {
}

使用findOne():

array(12) {
  ["_id"] => object(MongoId)#54 (1) {
    ["$id"] => string(24) "4fd85d178efd307080000001"
  }
  ["autoadd"] => string(1) "1"
  ["name"] => string(5) "Sport"
  ["keyword"] => string(8) "cookie29"
  ["antal"] => string(1) "0"
  ["antal_week_date"] => string(10) "1218818007"
  ["version"] => string(1) "1"
  ["active"] => string(1) "1"
  ["antal_week"] => string(1) "0"
  ["customer_id"] => string(1) "2"
  ["id"] => string(2) "29"
  ["insert_date"] => string(10) "2007-11-21"
}

使用$output = $this->_collection->find($input)->count();时:

int(20)

我做错了什么?这可能是一个简单的问题,但我找不到任何其他方法来做这些事情。如果你想知道输入是什么,它只是一个关联数组:

$data = array('active' => '1');

请帮我抓取所有这20个不错的“行”数据。 我很感激。

感谢您的建议和更好的智慧!

1 个答案:

答案 0 :(得分:12)

find()返回游标,而不是带有实际数据的数组。你必须迭代光标。这是an example from the documentation

$m = new Mongo();
$db = $m->selectDB('test');
$collection = new MongoCollection($db, 'phpmanual');

// search for documents where 5 < x < 20
$rangeQuery = array('x' => array( '$gt' => 5, '$lt' => 20 ));

$cursor = $collection->find($rangeQuery);
foreach ($cursor as $doc) {
    var_dump($doc);
}