Cloudant查询& CouchDB Mango:如何设置$ regex标志?

时间:2016-05-11 09:00:12

标签: couchdb cloudant

是否可以使用Cloudant Query / CouchDB 2.0 Find来设置$ regex标志?

具体来说,我想要一个不区分大小写的搜索,全局也很有用。

在JavaScript中我会这样做:

db.find({
    selector: {
      _id: {$gt: null},
      series: {$regex: /mario/i}
    }
  });

但我不知道如何将其编码为Erlang字符串。

2 个答案:

答案 0 :(得分:7)

来自Cloudant支持:

我们了解您希望在Cloudant查询中使用 $ regex 运算符进行不区分大小写的匹配。

例如,您可以使用此Cloudant查询选择器来获取“series”字段具有字符串值的所有文档,其中字符串值与字符串“mario”不区分大小写:

{
  "selector": {
    "_id": {
      "$gt": null
    },
    "series": {
      "$regex": "(?i)mario"
    }
  }
}

在名为query.txt的文件中使用该选择器,并为$ ACCOUNTNAME,$ DATABASE,$ USERNAME和$ PASSWORD设置适当的值,您可以运行此查询以获得正确的结果:

curl -X POST http://$ACCOUNTNAME.cloudant.com/$DATABASE/_find -H 
  "Content-Type: application/json" -d @query.txt -u $USERNAME:$PASSWORD

位于https://docs.cloudant.com/cloudant_query.html#creating-selector-expressions的Cloudant API参考说明了Cloudant查询选择器中的$ regex运算符:

  

大多数选择器表达式的工作方式完全符合您的预期   给定的运营商$ regex运算符使用的匹配算法   目前基于Perl兼容正则表达式(PCRE)   图书馆。但是,并非所有PCRE库都已实现,并且   $ regex运算符的某些部分超出了PCRE提供的范围。对于   有关实施内容的更多信息,请参阅Erlang Regular   表达信息http://erlang.org/doc/man/re.html

在它所指的http://erlang.org/doc/man/re.html引用的Erlang正则表达式信息中 在以下选项列表中:compile(Regexp,Options) - > {ok,MP} | {error,ErrSpec}

  

<强>无壳

     
      
  • 模式中的字母匹配大写和小写字母。

  •   
  • 它相当于Perl的/ i选项,可以通过(?i)选项设置在模式中更改。

  •   
  • 大写和小写字母的定义与ISO-8859-1字符集相同。

  •   

我希望这会有所帮助。

答案 1 :(得分:0)

使用Erlang正则表达式进行couchdb字符串匹配 例如: {“selector”:{“_ id”:{“$ regex”:“sre +”},“doctype”:“user”},“fields”:[“_ id”],“sort”:[{“_ id”: “ASC”}]}