我想从两个有共同字段的集合中获取数据 这两个集合之间。我正在给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号线上
答案 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;