如何在symfony2中查询条件为“like”的mongodb

时间:2013-04-16 05:51:41

标签: mongodb symfony

我需要在我的symfony2应用中搜索用户

如果用户在搜索框中输入字母并提交,那么他需要让用户以该字母开头。

如何实现这一目标? 下面的代码将获得我们在文本框中输入的确切用户。

如何申请"喜欢"在此

中查询

我的行动代码

public function searchAction(Request $request)
{

    $fname = $request->query->get('fname');
    if(isset($fname)){
    $user = $this->get('doctrine.odm.mongodb.document_manager')
        ->getRepository('WishbotWebBundle:User')
        ->findByusername($fname);
         return $this->render('WishbotWebBundle:Default:search.html.twig',array('user'=>$user));

    }else{
        return $this->render('WishbotWebBundle:Default:search.html.twig');

    }
}

1 个答案:

答案 0 :(得分:2)

首先,让我们看看MongoDB:使用正则表达式进行搜索可以通过定义正则表达式来完成,如here所述:

db.users.find({"username": /^a/})

通过定义正则表达式可以在php中完成相同的操作,解释here

$collection->find(array('name'=> array('$regex' => '^a'));

您可以使用与Doctrine MongoDB ODM几乎完全相同的正则表达式语法:

$user = $this->get('doctrine.odm.mongodb.document_manager')
        ->getRepository('WishbotWebBundle:User')
        ->findByUsername(array('$regex' => $fname));

请注意,即使只找到一个文档,也会返回一组文档。上面的正则表达式还匹配用户名在任何地方包含$fname字符串的所有文档。

如果您想要以$fname开头的用户名,则需要使用'^' . $fname