mongodb java$在带有$regex的查询中
我试图用mongo+java中的$regex
编写$in
查询。它在mongo shell也不起作用。我的意思是,我没有得到任何结果,但也没有查询解析错误。
这是我从Java调试器中得到的最后一个查询,我说collection.find(finalQuery)
{"$and": [
{"$or": [
{"country": "united states"}
]},
{"businesses": {
"$in": [
{"$regex": "^.*cardinal.*health.*$"},
{"$regex": "^.*the.*hartford.*$"}
]
}}
]}
用于上述查询的Java代码snipet:
Set<Pattern> businesses = new HashSet<Pattern>();
for(String st: srchTerms) {
businesses.add(Pattern.compile("^"+st.trim()+"$"));
}
srchTermQuery.append("businesses", new BasicDBObject("$in", businesses));
然而,以下查询在mongo shell中工作,但我不知道如何将其写入java:
{"registering_organization": {
"$in": [
/^.*cardinal.*health.*$/,
/^.*the.*hartford.*$/
]
}}
如果我们试图将正则表达式定义为字符串,Java代码会在其周围添加双引号
# 1 楼答案
您将无法转换:
直接转换为Java正则表达式。这不是一个bug,因为Java驱动程序在创建正则表达式查询时使用
$regex
格式来避免任何歧义报告指出:
因此,您的Java生成了以下查询:
与您尝试转换的查询完全相同:
总之,您编写的Java已经是转换所需查询的正确方法。我在自己的测试中运行了它,它返回了预期的结果
如果您包括一些您希望通过查询返回的示例文档,我们可能会进一步提供帮助
# 2 楼答案
我需要列出所有以指定字符串开头的键。以下内容在CLI中适用于我:
以下是Java实现:
注意:“TESTPROD”只是告诉我应该使用两个数据库中的哪一个
# 3 楼答案
您必须使用mongodb正则表达式表示法,而不是将其放入字符串中
db.somecollection.find({records: {$in: [/.*somestring.*/]}})
# 4 楼答案
您看到的行为可能是一个bug,但是作为替代,您可以这样编写查询
虽然不漂亮,但它似乎很管用