繁体   English   中英

执行MongoDB在PHP中查找查询

[英]Executing MongoDB find queries in PHP

我需要能够从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()方法和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
)

正如您所看到的那样,数据库中实际上没有任何内容:如何获取实际行?

$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()'));

我遇到了同样的问题,这是我使用execute的解决方案:

$m = new MongoClient();
$db = $m-><dbName>;
print_r($db->execute('return { count : db.<collection>.count() }'));

我的结果:

Array
(
    [retval] => Array
        (
            [count] => 10
        )

    [ok] => 1
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM