我将phalcon与mongo db一起使用。模型是集合。 我想用find来获取
SELECT * FROM Users WHERE Username LIKE '%TienNguyen%'
我在mongo db中看到有查询
b.users.find(
{ Username: /TienNguyen/ }
)
但在收集Phalcon时。我该如何编码呢。
我试过Users::find([['Username' => "/TienNguyen/"]]);
它不起作用。
请帮帮我
答案 0 :(得分:5)
是的,您想要的是$regex运算符表单,而不是将regex
作为字符串传递。虽然该表单在shell中有效,但大多数驱动程序对操作符语法更为满意:
Users::find([[ 'Username' => [ '$regex' => 'TienNguyen' ] ]])
如页面所示,非常小心使用 $ regex 。如果您没有使用插入符操作符在"^TienNguyen"
中搜索字符串的* start *,则可能会破坏性能。
作为参考,只需JSON解码Mongo手册中的任何标准参数形式,即可获得大多数本机驱动程序函数的语言等效结构。
答案 1 :(得分:2)
找到解决方案
$objs = Items::find(
[
[
'title' => [
'$regex' => $query,
'$options' => 'i'
]
]
]
);
答案 2 :(得分:1)
如上所述,未锚定在字符串开头的正则表达式搜索可能非常昂贵,因为它们需要全表扫描。根据您的使用情况,您可以考虑使用text index。它为不区分大小写的非锚定搜索提供支持,包括后缀词干。
答案 3 :(得分:0)
您可以执行以下操作:
$Users = \Users::query()
->where(name LIKE :name:)
->bind(array('name' => '%' . $name . '%'))
->execute();
答案 4 :(得分:0)
请尝试一下:
Users::find([['Username' => new MongoRegex("/TienNguyen/")]]);
祝你好运!