使用PHP驱动程序的Mongodb $ lookup查询无效

时间:2018-02-07 09:10:28

标签: php mongodb

  

我想从两个有共同字段的集合中获取数据   这两个集合之间。我正在给Mongo和   PHP。我的PHP版本是PHP 5.6.31-1~ubuntu14.04.1 + deb.sury.org + 1(cli)   我在两个集合之间的mongo db查询:

db.dental_refset.aggregate(
[
    {   $lookup:
        {
            from:"v20170731",
            localField:"referencedComponentId",
            foreignField:"conceptId",
            as:"joinedData"
        }
    }

])

我在php中使用它,我的代码如下:

error_reporting(1); 
require 'driver/vendor/autoload.php'; 
$client = new MongoDB\Client("mongodb://192.168.2.95:27017");
$collection = $client->selectDatabase('en-edition')->selectCollection("dental_refset");
$ops = array(
    array(
        "$lookup" => array(
            "from" => "v20170731",
            "localField" => "referencedComponentId",
            "foreignField" => "conceptId",
            "as" => "user_docs"
        )
    )
);
$results = $collection->aggregate($ops);
print_r($collection);
  

但是发生了错误。错误如下:

     

未捕获的MongoDB \ Driver \ Exception \ RuntimeException:无效的过滤器:为空   键入   /var/www/html/mednxtMod/mednxt/driver/vendor/mongodb/mongodb/src/Operation/Aggregate.php:223\nStack   追踪:\ n#0   /var/www/html/mednxtMod/mednxt/driver/vendor/mongodb/mongodb/src/Operation/Aggregate.php(223):   的MongoDB \驱动\服务器 - > executeCommand('烯版&#39 ;,   对象(MongoDB的\驱动程序\ COMMAND)   对象(MongoDB的\驱动\ ReadPreference))\ n#1   /var/www/html/mednxtMod/mednxt/driver/vendor/mongodb/mongodb/src/Collection.php(215):   MongoDB的\操作\聚集物>执行(对象(MongoDB的\驱动\服务器))\ N#2   /var/www/html/mednxtMod/mednxt/error.php(19):   MongoDB \ Collection-> aggregate(Array)\ n#3 {main} \ n抛出   /var/www/html/mednxtMod/mednxt/driver/vendor/mongodb/mongodb/src/Operation/Aggregate.php   在223号线上

2 个答案:

答案 0 :(得分:0)

对'$ lookup'使用单引号或将其转义为“\ $ lookup”,否则PHP会将其视为变量,未定义/为空

答案 1 :(得分:0)

这正在使用toArray();

error_reporting(1);     $ collection = $ this-> mongo-> your_db-> admin;

    $ops = array(

        array(
            '$lookup' => array(
                "from" => "users",
                "localField" => "id",
                "foreignField" => "user_id",
                "as" => "inventory_docs"
            )
        )

    );
    $results = $collection->aggregate($ops)->toArray();
    echo "<pre>";    print_r($results);exit;