Поиск без учета регистра внутри условия проекции - PullRequest
0 голосов
/ 02 ноября 2018

Данные в таблице отелей хранятся как

   {
     _id: ....,
     HotelName: ...,
     MasterKeyDetails:[
     { 
       MasterKeyId: 36K1,
       ...
     },
     {
        MasterKeyId: 36J1,
       ...
     }
     ]

  }

Я написал ниже запрос

       $cursor = $this->collection->aggregate(array(
                array(
                    '$match' => array(
                        "_id" => new MongoDB\BSON\ObjectID($this->id)
                    )
                ),
                array(
                    '$project' => array(
                        'MasterKeyDetails' => array(
                            '$filter' => array(
                                'input' => '$MasterKeyDetails',
                                'as' => 'room',
                                'cond' => array(
                                    '$eq' => array('$$room.MasterKeyId', $this->MasterKeyId)
                                )
                            )
                        ),
                    )
                )
            )
         )->toArray();

Поиск в порядке. Он ищет, когда $ this-> MasterKeyId содержит 36K1, но не ищет, когда $ this-> MasterKeyId содержит 36k1. Я хочу получить его, несмотря на регистрозависимые данные ...

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

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете использовать $toUpper для нормализации данных:

   $cursor = $this->collection->aggregate(array(
            array(
                '$match' => array(
                    "_id" => new MongoDB\BSON\ObjectID($this->id)
                )
            ),
            array(
                '$project' => array(
                    'MasterKeyDetails' => array(
                        '$filter' => array(
                            'input' => '$MasterKeyDetails',
                            'as' => 'room',
                            'cond' => array(
                                '$eq' => array(array('$toUpper' =>'$$room.MasterKeyId'), $this->MasterKeyId)
                            )
                        )
                    ),
                )
            )
        )
     )->toArray();

Таким же образом вы убедитесь, что данные, которые вы должны предоставить для сравнения, также в том же случае. Также есть $toLower, если вы предпочитаете этот путь.

Пока еще нет другой функции "сопоставления без учета регистра", которую можно использовать как часть конвейера агрегации, поэтому в настоящее время используется "нормализация".

...