我需要能够从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库所需的数组格式的东西,但这将是我不想做的很多工作。
这与此处提出的问题相同:How to access MongoDB profile in PHP? - 但当时没有给出答案。
这个问题:PHP MongoDB execute() locking collection将find()方法与find()一起使用,他们说它适用于它们,但我不确定如何。
所以我在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
)
正如您所看到的,数据库中实际上没有任何内容:如何获取实际的行?
答案 0 :(得分:1)
$m = new MongoClient();
$db = $m-><dbName>;
print_r($db->execute('db.<collection>.toArray()'));
假设您的数据库名称为test,集合名称为foo。
print_r($m->test->execute('return db.foo.find().toArray()'));
答案 1 :(得分:1)
我遇到了同样的问题,这是我使用execute的解决方案:
curElement.setAttribute("style", "display:none")
我的结果:
$m = new MongoClient();
$db = $m-><dbName>;
print_r($db->execute('return { count : db.<collection>.count() }'));