错误信息查找管道必须是字符串,是数组类型
Posted
技术标签:
【中文标题】错误信息查找管道必须是字符串,是数组类型【英文标题】:Error message lookup pipeline must be a string, is type array 【发布时间】:2019-03-02 03:57:27 【问题描述】:我使用的是 mongodb 3.6 版本。
我有载有类似文件的车辆表
"_id": ObjectId("5b976220d2ccda12fc0050fb"),
"VehicleNumber": "JK 678",
"NumberOfSeats": "47",
"_id": ObjectId("67976220d2ccda12fc005068"),
"VehicleNumber": "JK 779",
"NumberOfSeats": "47",
我有类似数据的路由表
"_id": ObjectId("5b7fb426d2ccda11fc005185"),
"Name": "New Jersey City",
"VehicleDetails": [
"VehicleEntryId": "b8d0d2b5-8f32-6850-4d79-34ed79138d6d",
"VehicleId": ObjectId("5b976220d2ccda12fc0050fb"),
...
"Status": "Active"
,
"VehicleEntryId": "b8d0d2b5-8f32-6850-4d79-34ed79138568",
"VehicleId": ObjectId("67976220d2ccda12fc005068"),
...
"Status": "Active"
],
...
我写过类似 mongodb 的聚合查询
$cursor = $this->collection->aggregate([
['$match' => ["_id" => new MongoDB\BSON\ObjectID('5b7fb426d2ccda11fc005185')]],
[
'$addFields' => [
'filteredIds' => [
'$map' => [
'input' => '$VehicleDetails',
'as' => 'item',
'in' => [
'$cond' => [
['$eq' => ['$$item.Status', 'Active']],
'$$item.VehicleId',
false
]
]
]
]
]
],
array(
'$lookup' => array(
'from' => 'VehicleTbl',
'$pipeline' => [
[ '$match'=> ["_id" => ['$in' => ['$$filteredIds'] ]]],
],
'as' => 'AllotedVehicleDetails'
)
),
])->toArray();
基本上,我正在尝试将所有分配的车辆提取到特定路线。因此,我首先使用 $addFeilds 运算符获取所有主动分配的车辆 ID,并将它们放入“filteredIds”然后在查找中我尝试使用管道从车辆表中获取车辆信息。上面的代码抛出错误消息'未捕获的异常'MongoDB\Driver\Exception\RuntimeException',并带有消息'$lookup argument'$pipeline: [ $match: _id: $in: [ "$$filteredIds" ] ]' 必须是字符串,是第 32 行中的数组类型。
请帮忙!!!
【问题讨论】:
【参考方案1】:使用pipeline
而不是$pipeline
。
例子:
$lookup :
'from' : 'vehicles',
let : localFilterIds : '$filteredIds',
pipeline : [
'$match' : $expr: '$in' : [ '$_id', '$$localFilterIds' ]
],
'as' : 'AllotedVehicleDetails'
注意:这是在mongoDb
GUI Robo 3T
中测试的。
【讨论】:
谢谢...我已经注意到了,但现在 AllotedVehicleDetails 是空的。你能帮忙吗!!!以上是关于错误信息查找管道必须是字符串,是数组类型的主要内容,如果未能解决你的问题,请参考以下文章
MongoDb 聚合 $match 错误:“参数必须是聚合管道运算符”