好的,这个想法是这样的:
鉴于如下模型:
Release {
Work[] works = ....
}
Run Code Online (Sandbox Code Playgroud)
和
Work {
String title;
}
Run Code Online (Sandbox Code Playgroud)
我得到了如何使用标准搜索版本"有标题的工作=什么":
DBObject crit = new BasicDBObject();
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title", "whatever")));
Run Code Online (Sandbox Code Playgroud)
我还得到了如何使用正则表达式来处理基本内容,例如"获取所有包含任何内容的tile":
crit.put("title", "/.*whatever.*/");
Run Code Online (Sandbox Code Playgroud)
但是,我该如何做一些像"获得所有版本以及包含任何内容的标题"的内容?
如果我试试这个,我什么也得不到:
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title", "/.*whatever.*/")));
Run Code Online (Sandbox Code Playgroud)
谢谢
好吧,好吧,我和这个问题中提出的问题几乎相同:
基本上,如果使用Java驱动程序,则将正则表达式设置为
new BasicDBObject("title", "/.*whatever.*/")
Run Code Online (Sandbox Code Playgroud)
它不会工作(虽然他们的文档和mongo控制台测试sais它应该)
但是,如果您使用更详细的方式声明正则表达式标准,它将起作用:
crit.put("works", new BasicDBObject("$elemMatch",new BasicDBObject("title",new BasicDBObject("$regex",".*whatever.*"))));
Run Code Online (Sandbox Code Playgroud)
它变得更加混乱.如果希望对表达式不敏感应用正则表达式模式,请将$options:'i'名称值对添加到正则表达式条件对象,例如:
new BasicDBObject("$regex",".*whAteVer.*").put("$options","i")
Run Code Online (Sandbox Code Playgroud)
也不行.
相反,你必须将不敏感的正则表达式标志INSIDE你的正则表达式字符串,如下所示:
new BasicDBObject("$regex",".*((?i)whAteVer).*")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3916 次 |
| 最近记录: |