好的,这个想法是这样的:
给出如下模型:
Release {
Work[] works = ....
}
和
Work {
String title;
}
我了解如何使用标准搜索版本“有标题工作=无论什么”:
DBObject crit = new BasicDBObject();
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title", "whatever")));
我还得到了如何使用正则表达式来处理基本内容,例如“获取包含任何内容的所有内容”:
crit.put("title", "/.*whatever.*/");
但是我该如何做一些像“获得所有包含标题的版本一样包含什么”的内容?
如果我试试这个,我什么也得不到:
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title", "/.*whatever.*/")));
由于
答案 0 :(得分:8)
好吧,好吧,我和这个问题中出现的问题几乎相同:
MongoDB Regex Query : Why doesn't this work?
基本上,如果使用Java驱动程序,则使用正则表达式,例如
new BasicDBObject("title", "/.*whatever.*/")
它不起作用(虽然他们的文档和mongo控制台测试应该是它应该)
但是,如果您使用更详细的方式声明您的正则表达式标准,它将起作用:
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title",new BasicDBObject("$regex",".*whatever.*"))));
它变得更加混乱。如果您希望以不区分大小写的方式应用正则表达式模式,请将$options:'i'
名称值对添加到正则表达式条件对象,例如:
new BasicDBObject("$regex",".*whAteVer.*").put("$options","i")
也不起作用。
相反,你必须将不敏感的正则表达式标志放在你的正则表达式字符串中,如下所示:
new BasicDBObject("$regex",".*((?i)whAteVer).*")