【问题标题】:$regularExpression operator in Mongodb not workingMongodb中的$regularExpression运算符不起作用
【发布时间】:2020-08-04 09:00:23
【问题描述】:

当我运行查询时,

db.getCollection('resources').find({
  "owner.firstName": {
    "$regularExpression": {
      "pattern": "^Del",
      "options": "i"
    }
  }
})

它显示错误消息,

Error: error: {
"ok" : 0,
    "errmsg" : "unknown operator: $regularExpression",
    "code" : 2,
    "codeName" : "BadValue"
}

注意:mongodb版本为4.4.0-rc13,此查询来源于,

private List<Criteria> buildNameSearch(String type,String name){
        String names[] = name.split(" ");
        ArrayList<Criteria> cr = new ArrayList<Criteria>();
        for (String nm : names) {
            Criteria criteria = new Criteria();
            criteria.orOperator(Criteria.where(type+".firstName").regex("^"+nm),
                    Criteria.where(type+".lastName").regex("^"+nm));
            cr.add(criteria);
        }
        return cr;
    }
Criteria.where(type+".firstName").regex("^"+nm)

请帮帮我...

【问题讨论】:

  • 应该是:$regex
  • Spring Query Criteria.where(type+".firstName").regex("^"+nm) 返回给我的是 $regularExpression 而不是 $regex
  • $regularExpression 是从 spring-data-mongodb 代码派生的MongoDB Extended Json - 它是一个表示不是实际的正则表达式运算符。通常,如果您将集合数据导出到 JSON,您会注意到日期、ObjectId 等对象字段在输出 JSON 文件中显示为扩展 JSON(因为这些 BSON 类型没有 JSON 表示)。这也是,类似的。错误消息是适当的,并且是意料之中的。
  • 知道了,感谢您帮助我。

标签: mongodb spring-boot


【解决方案1】:
db.getCollection('resources').find({
  "owner.firstName": {
      "$regex": "^Del", //regex and pattern goes here
      "$options": "i". //regex options goes here
    }
  }
})
  1. 使用$regex 代替$regularExpression - $regex

  2. 没有pattern

  3. 使用 $options

你的 spring 查询看起来不错。

【讨论】:

  • Spring Query Criteria.where(type+".firstName").regex("^"+nm) 返回给我的是 $regularExpression 而不是 $regex
  • 你是如何得出这个查询的?
  • 我从spring日志打印查询中得到这个查询,spring中没有错误但是在shell中
  • 这是错误的做法。 toString 不会提供准确的 mongo 查询。
  • 我只提供了spring日志中的部分搜索查询
猜你喜欢
  • 2018-04-27
  • 2021-09-18
  • 2022-08-20
  • 2021-08-28
  • 1970-01-01
  • 2017-02-14
  • 2021-07-26
  • 2022-06-21
  • 2016-04-21
相关资源
最近更新 更多