在投影条件内搜索不区分大小写

Case insensitive search inside projection condition

酒店table的数据存储方式如

   {
     _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 时不搜索。我希望它应该获取尽管区分大小写的数据...

请帮忙!!!

您可以使用$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

目前还没有其他 "case insensitive match" 函数可以用作聚合管道的一部分,因此 "normalizing" 是当前的方法。