MongoDB $regex 运算符不支持使用 mongoc 的 NodeJS
MongoDB $regex operator don't work NodeJS using mongoc
我已阅读 MongoDB 文档并且有一个“$regex”运算符。我目前正在为使用 bsonsearch
的 C++ 编写的驱动程序执行 NodeJS 绑定。我在 NodeJS 中使用此代码:
db.find(bson.serialize({foo: {$regex: new RegExp('.', 'i')}}), function (err, docs) {
//things
});
它通过 C++ 并由 mongoc-matcher 处理。但是 mongoc-matcher return 给我一个错误:
Invalid operator "$regex"
所以,我搜索了替代方案,我发现这个可行:
db.find(bson.serialize({foo: {$eq: new RegExp('.', 'i')}}), function (err, docs) {
//things
});
但我需要处理 $regex 运算符以解决向后兼容问题。谁有正确的语法?
嗨,我是 bsonsearch 的作者!
edit- 开了个房间讨论https://chat.whosebug.com/rooms/181623/bsonsearch
edit2:看起来您正在尝试将扩展 JSON 与 $regex 一起使用,但编码为 BSON 位。我们需要选择一个或另一个并在 C 端使用适当的 bson_new_from_* 来反序列化它。
除了使用他们的一些代码外,我的代码与 mongo-c-driver 没有任何关系。这是一个单独的项目,用于客户端文档匹配。
假设您知道并且不尝试将 bsoncompare 连接到 mongodb,如果您打算使用它,则需要直接在字符串中使用 mongodb 的二进制正则表达式格式方式。
bsonsearch 正则表达式 shcema 直接来自 mongodb 正则表达式模式(从 $options 中拆分 $regex)
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 表示不区分大小写)
您可能知道这一点,但是 .简单地匹配字符串中任意位置的一个字符。
我已阅读 MongoDB 文档并且有一个“$regex”运算符。我目前正在为使用 bsonsearch
的 C++ 编写的驱动程序执行 NodeJS 绑定。我在 NodeJS 中使用此代码:
db.find(bson.serialize({foo: {$regex: new RegExp('.', 'i')}}), function (err, docs) {
//things
});
它通过 C++ 并由 mongoc-matcher 处理。但是 mongoc-matcher return 给我一个错误:
Invalid operator "$regex"
所以,我搜索了替代方案,我发现这个可行:
db.find(bson.serialize({foo: {$eq: new RegExp('.', 'i')}}), function (err, docs) {
//things
});
但我需要处理 $regex 运算符以解决向后兼容问题。谁有正确的语法?
嗨,我是 bsonsearch 的作者!
edit- 开了个房间讨论https://chat.whosebug.com/rooms/181623/bsonsearch
edit2:看起来您正在尝试将扩展 JSON 与 $regex 一起使用,但编码为 BSON 位。我们需要选择一个或另一个并在 C 端使用适当的 bson_new_from_* 来反序列化它。
除了使用他们的一些代码外,我的代码与 mongo-c-driver 没有任何关系。这是一个单独的项目,用于客户端文档匹配。
假设您知道并且不尝试将 bsoncompare 连接到 mongodb,如果您打算使用它,则需要直接在字符串中使用 mongodb 的二进制正则表达式格式方式。
bsonsearch 正则表达式 shcema 直接来自 mongodb 正则表达式模式(从 $options 中拆分 $regex) 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 表示不区分大小写)
您可能知道这一点,但是 .简单地匹配字符串中任意位置的一个字符。