我已经阅读了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运算符打交道。任何人都有正确的语法吗?
答案 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表示不区分大小写)
您可能知道这一点,但是一个。只需在字符串中的任意位置完全匹配一个字符。