错误信息查找管道必须是字符串,是数组类型

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 是空的。你能帮忙吗!!!

以上是关于错误信息查找管道必须是字符串,是数组类型的主要内容,如果未能解决你的问题,请参考以下文章

ajax查找错误信息

MongoDb 聚合 $match 错误:“参数必须是聚合管道运算符”

AWS 数据管道 Dynamodb 到 Redshift

无法插入:错误:数组值必须以“”或维度信息开头

Rails Postgre 问题:数组文字格式错误,数组值必须以“”或维度信息开头

Scikit-learn 管道类型错误:zip 参数 #2 必须支持迭代