gpt4 book ai didi

javascript - MongoDB $regex 运算符不使用 mongoc 的 NodeJS

转载 作者:可可西里 更新时间:2023-11-01 10:45:54 24 4
gpt4 key购买 nike

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

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

它通过 C++ 并由 mongoc-matcher 处理。但是 mongoc-matcher 给我返回了一个错误:

Invalid operator "$regex"

所以,我搜索了替代方案,我发现这个可行:

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

但我需要处理 $regex 运算符以解决向后兼容问题。谁有正确的语法?

最佳答案

嗨,我是 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 模式(从 $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 表示不区分大小写)

您可能知道这一点,但是 .简单地匹配字符串中任意位置的一个字符。

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

关于javascript - MongoDB $regex 运算符不使用 mongoc 的 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52520936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com