酒店表中的数据存储方式
{
_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时,它将不搜索。我希望它尽管存在区分大小写的数据也应获取...
请帮助!!!
答案 0 :(得分:1)
您可以使用$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
。
到目前为止,还没有其他“不区分大小写的匹配”功能可以用作聚合管道的一部分,因此“规范化”是当前的方法。