MongoDB $ regex运算符无法使用mongoc

时间:2018-09-26 15:07:49

标签: javascript node.js mongodb mongo-c-driver

我已经阅读了MongoDB文档,并且有一个“ $ regex”运算符。我目前正在为使用bsonsearch的C ++编写的驱动程序进行NodeJS绑定。我在NodeJS中使用以下代码:

db.find(bson.serialize({foo: {$regex: new RegExp('.', 'i')}}), function (err, docs) {
  //things
});

它通过C ++进行处理,并由mongoc-matcher处理。但是mongoc-matcher会给我一个错误:

  

无效的运算符“ $ regex”

所以,我搜索了替代方法,然后看到了这个方法:

db.find(bson.serialize({foo: {$eq: new RegExp('.', 'i')}}), function (err, docs) {
  //things
});

但是对于向后兼容的问题,我需要与$ regex运算符打交道。任何人都有正确的语法吗?

1 个答案:

答案 0 :(得分:0)

哦,嗨,我是bsonsearch的作者!

编辑-打开了一个讨论https://chat.stackoverflow.com/rooms/181623/bsonsearch

的房间

edit2:您似乎正在尝试将扩展JSON与$ regex一起使用,但编码为BSON位。我们需要选择一个,然后在C端使用适当的bson_new_from_ *对其进行反序列化。

除了使用某些代码外,我的代码与mongo-c-driver没有任何关系。这是一个用于客户端文档匹配的单独项目。

假设您知道并且不尝试将bsoncompare连接到mongodb,如果您打算以这种方式使用它,则需要直接在字符串中使用mongodb的二进制正则表达式格式。

bsonsearch regex shcema直接来自mongodb regex模式(将$ regex与$ options分开) https://docs.mongodb.com/manual/reference/operator/query/regex/

此测试文件包含示例 https://github.com/bauman/bsonsearch/blob/master/lib/tests/bsoncompare_regex.c

针对您的具体情况,请使用此:

spec = {"foo": {"$regex": ".", "$options": "i"}}
                           ^                ^
---------------------------^                ^
--------------------------------------------^ (case insensitive)

直接将要用作正则表达式的utf-8字符串放入$ regex密钥(您的情况下为一个点),并添加一个不区分大小写的$ options密钥(一个i表示不区分大小写)

您可能知道这一点,但是一个。只需在字符串中的任意位置完全匹配一个字符。

https://www.debuggex.com/cheatsheet/regex/pcre