【问题标题】:Mongo DB find - SQL Like - wildcard in the middlemongodb find - SQL Like - 中间的通配符
【发布时间】:2019-11-26 10:51:22
【问题描述】:

这个问题与How to query MongoDB with "like"? 非常相似,但我无法使用它或https://docs.mongodb.com/manual/reference/operator/query/regex/ 此处的文档来找出我需要的查询。

我需要在一个字段中具有以下格式值的 mongo 集合中查找文档:

"key->some_name::details->(value = '{wild_card_value_here}'):sort->by_name"

在 SQL 中,这个查询看起来像

SELECT * from some_Table where field like 'key->some_name::details->(value = ''%''):sort->by_name'

注意单引号是字符串的一部分

这是我对 mongo 的尝试:

db.getCollection('collection_name').find({"some_field":{$regex:/^key->some_name::details->(value = '.*'):sort->by_name/}})

但它返回 0 个文档。我也试过这个也没有用:

db.getCollection('collection_name').find({"some_field":"key->some_name::details->(value = '/.*/'):sort->by_name"})

我不确定是语法本身有问题还是字符串中的特殊字符(如 , -> : 等)有问题。

编辑: 我想找到的示例文档:

{
...
"some_field":"key->some_name::details->(value = 'id_1'):sort->by_name"
...
}

{
...
"some_field":"key->some_name::details->(value = 'id_2'):sort->by_name"
...
}

【问题讨论】:

  • 建议添加您希望找到的文档示例。理想情况下,如果它不是一个整体,而是一个精简版本,只有足以重现您的结果的字段,在您的情况下,它似乎是“some_field”。孤立地练习你的正则表达式技能也不会有害,例如在regex101.com。我会说 () 是特殊字符的更好候选者
  • @AlexBlex 你是对的,是特殊字符( )

标签: mongodb sql-like regexp-like


【解决方案1】:

原来这是转义特殊字符 () 的问题,有效的查询是:

db.getCollection('collection_name').find({"some_field":{$regex:/^key->some_name::details->\(value = '.*'\):sort->by_name/}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多