具有正则表达式的MongoDB查找与Java的行为不同

时间:2013-11-07 03:34:59

标签: java regex mongodb

使用MongoDB 2.4.6进行正则表达式的行为与Java Pattern类的行为方式不同。任何人都可以解释原因吗?

在MongoDB中插入数据:

db.Project.insert({ "_id" : "e0b57d9e-744c-471e-ae95-22a389d2988d", "name" : "Project.20131106101344433" });

查找所有项目:

db.Project.find()

{
    "_id" : "e0b57d9e-744c-471e-ae95-22a389d2988d",
    "name" : "Project.20131106101344433"
}

查找名称为“t”的所有项目:

db.Project.find({"name" : /t/})

{
    "_id" : "e0b57d9e-744c-471e-ae95-22a389d2988d",
    "name" : "Project.20131106101344433"
}

检查唯一的项目名称与正则表达式“t”不匹配:

@Test
public void regex() {
    assertTrue(!Pattern.matches("t", "Project.20131106101344433"));
}

如您所见,正则表达式db.Project.find返回一个名称不是“t”的项目,但包含“t”。我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

在这种情况下db.Project.find({"name" : /t/})您不是在寻找名称为t的文档,而是在查找名称中包含t的每个文档。您可以阅读有关PECL here的信息,并测试您在做什么here

要查找完全匹配,您必须执行{"name" : 't'}