Запрос $ match не работает для массива поиска в mongodb - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть две таблицы в базе данных mongodb

 activityCountTbl contains data like

        {
             "_id": ObjectId("5c234f7e3250041280000ca3"),
             "activityId": ObjectId("5c0e27ee590a06bf08003c33"),
             "weekgroupId": ObjectId("5bfbddbcbb2c5645f8001495"),
             "squadronId": ObjectId("5bfc7b7ebb2c56c320002a0a"),
             "attendingCount": NumberInt(6),
             ....
        }  

        {
             "_id": ObjectId("5c234f7e3250041280000ca3"),
             "activityId": ObjectId("5c0e27ee590a06bf08003c33"),
             "weekgroupId": ObjectId("5bfbddbcbb2c5645f8001496"),
             "squadronId": ObjectId("5bfc7b7ebb2c56c320002a0a"),
             "attendingCount": NumberInt(6),
             ....
        } 
   squadronTbl contains data like

         {
           "_id": ObjectId("5c19ccb7590a060691000554"),
           "squadronCode": "336",
           "squadronName": "336TRS",
         }

         {
           "_id": ObjectId("5c19ccb7590a060691000556"),
           "squadronCode": "337",
           "squadronName": "337TRS",
         }

Я храню информацию о количестве конкретных действий в недельной группе в activityCountTbl.Я выполняю поиск на squadronTbl с activityCountTbl для получения сведений о эскадронах конкретной недели.Код ниже не работает.

Когда я комментирую / удаляю код запроса $, он выбирает все эскадрильи всех групп недели.

        $query = ["ActivityArray.weekgroupId" => new MongoDB\BSON\ObjectID("5bfbddbcbb2c5645f8001495"), "ActivityArray.funRun" => "Yes"];   

        $pipeline = array(
            [
              '$match' => $query
            ],  
            [
              '$lookup' => [
                'from' => 'activityCountTbl',
                'localField' => '_id',
                'foreignField' => 'squadronId',
                'as' => 'ActivityArray'
              ]
            ],
            ['$project' => [
                '_id' => 1.0,
                'squadronName' => 1.0,
                'ActivityArray' => 1.0
            ]],
        );

        return $this->db->squadronTbl->aggregate($pipeline)->toArray();

Пожалуйста, помогите !!!

1 Ответ

0 голосов
/ 26 декабря 2018
$query = ["ActivityArray.weekgroupId" => new MongoDB\BSON\ObjectID("5bfbddbcbb2c5645f8001495"), "ActivityArray.funRun" => "Yes"]

$pipeline = array(
    [
      '$match' => []
    ],  
    [
      '$lookup' => [
        'from' => 'activityCountTbl',
        'localField' => '_id',
        'foreignField' => 'squadronId',
        'as' => 'ActivityArray'
      ]
    ],
    [
      '$match' => $query 
    ],
    ['$project' => [
        '_id' => 1.0,
        'squadronName' => 1.0,
        'ActivityArray' => 1.0
    ]],
);

что-то в этом роде

...