我处于需要能够从 PHP 内部运行直接 mongodb 查询的情况,并且遇到了 execute() 函数的问题。
以下代码将正确执行并从数据库返回结果:
$m = new MongoClient();
$db = $m-><dbName>;
print_r($db->execute('db.<collection>.count()'));
但是,如果我用 find() 替换 count() ,我会得到以下结果:
Array
(
[retval] => Array
(
[value] => DBQuery: <dbName>.<collection>-> undefined
)
[ok] => 1
)
为什么其中一个查询有效,而另一个查询失败?我该如何克服这个问题?我曾考虑编写一些东西,将 MongoDB 查询转换为 PHP Mongo 库使用的必要数组格式,但这将是很多我不想经历的工作。
这与此处提出的问题相同:如何在 PHP 中访问 MongoDB 配置文件?——但当时没有给出答案。
这个问题:PHP MongoDB execute() 锁定集合利用了带有 find() 的 execute() 方法,他们说它适用于他们,但我不确定如何。
更新:
所以我在 pecl 中更新了 mongo,但这并没有解决任何问题。然而,我也做了一个 YUM 更新,它为 php-pecl-mongo-1.2.12-1.el6.x86_64 提供了一个单独的包更新,使我进入了 1.3.4-1。
现在,$db->execute('db.<collection>.find())
返回一些东西......但完全不是我所期望的。不是返回一个MongoCursor
对象,而是返回一个Array
,虽然它有一个retval
字段,但执行的查询中没有实际信息。它看起来像这样:
Array
(
[retval] => Array
(
[_mongo] => Array
(
[slaveOk] =>
[host] => EMBEDDED
)
[_db] => Array
(
[_mongo] => Array
(
[slaveOk] =>
[host] => EMBEDDED
)
[_name] => test
)
[_collection] => Array
(
[_mongo] => Array
(
[slaveOk] =>
[host] => EMBEDDED
)
[_db] => Array
(
[_mongo] => Array
(
[slaveOk] =>
[host] => EMBEDDED
)
[_name] => test
)
[_shortName] => hits
[_fullName] => test.hits
)
[_ns] => test.hits
[_query] => Array
(
)
[_fields] =>
[_limit] => 0
[_skip] => 0
[_batchSize] => 0
[_options] => 0
[_cursor] =>
[_numReturned] => 0
[_special] =>
)
[ok] => 1
)
如您所见,那里的数据库实际上没有任何内容:我如何获得我的实际行?