java - mongodb java $in 使用 $regex 查询

标签 java regex mongodb

我正在尝试在 mongo+java 中使用 $regex 编写 $in 查询。它也不适用于 mongo shell。我的意思是我没有得到任何结果,但也没有查询解析错误。 这是我在 collection.find(finalQuery)

这行从 Java Debugger 获得的最终查询
{"$and": [ 
    {"$or": [
        {"country": "united states"}
    ]}, 
    {"businesses": {
        "$in": [
            {"$regex": "^.*cardinal.*health.*$"},
            {"$regex": "^.*the.*hartford.*$"}
        ]
    }}
]}

上述查询的 Java 代码片段:

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 代码会在正则表达式周围添加双引号。

最佳答案

您看到的行为可能是一个错误,但是作为替代方案,您可以像这样编写查询

Pattern pattern = Pattern.compile("(^aaa$)|(^bbb$)");
srchTermQuery.append("businesses", pattern);

不漂亮,但它似乎可以解决问题

关于java - mongodb java $in 使用 $regex 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984750/

相关文章:

java - hibernate/ Spring : Lots (thousands) of open connections the database

java - 在两个变量中的任何一个可以相等的情况下,重写 equals 和 hashcode 的正确方法是什么?

jquery - jquery中正十进制值和-1值的正则表达式

node.js - 对 mongodb 批量 API 实现限制

java - 为什么这段代码会给出线程优先级的输出?

java - 单选按钮总是将默认值保存到 sqlite 中

regex - 前瞻和后向正则表达式

java - 更好的正则表达式语法想法

node.js - Mongoose 和 Kue - Node.js - 传递的对象没有方法保存

node.js - 传入的参数必须是 24 个十六进制字符的字符串 - 我认为是