mongodb mongocxx mongosh数据库当前操作BSON错误:BSON文档中的UTF-8字符串无效

hivapdat  于 2023-03-17  发布在  Go
关注(0)|答案(1)|浏览(377)

我使用debian 9和debian 10 mongocxx驱动程序在mongodb 6.0中插入数据。然后我使用mongosh 1.6通过db.currentOp监视操作。我收到一个错误BSONError:BSON文档中的UTF-8字符串无效。
我可以打开性能分析并使用db.system.profile.find查找ops配置文件。我看到,除了用户数据之外,该配置文件还包含驱动程序描述数据,如下所示:
“$客户端”:{驱动程序:{姓名:'',版本:'kafkaclient' },...平台:'网络/库/x86_64-Linux-gnu' G\b\x18_\x7F ',
这样的驱动程序名称不会导致BSON错误。但有时我会看到驱动程序描述数据,如下所示:
“$客户端”:{驱动程序:{姓名:'',版本:'kafkaclient' },...平台:'网络/库/x86_64-Linux-通用' G\b '\x7F'
�� - 此符号会导致db.system.profile.finddb.currentOp的BSON错误。对于db.system.profile.find,我可以使用enableUtf 8Validation= false来避免错误。但对于currentOp,我不能使用enableUtf 8Validation。但我应该使用db.currentOp进行操作监视。我还有以下问题:
1.对于相同的操作系统,mongocxx驱动程序,mongodb,mongosh..驱动程序名称数据可以在c++客户端和mongodb之间的会话之间不同。为什么?
1.我还可以禁用db.currentOp的UTF8验证吗?
1.为什么mongocxx+mongodb+debian会避免BSON UTF8错误?主要会是什么原因:驱动程序mongocxx,操作系统debian,mongodb?

mklgxw1f

mklgxw1f1#

一些调查让我得出了下一个结果。
1.事实上,我们有3个层次的拱门:mongosh(https://www.mongodb.com/docs/mongodb-shell/)=〉节点. js驱动程序(https://github.com/mongodb/node-mongodb-native)=〉mongodb

  1. Mongosh和mongodb不知道启用Utf8验证,但node.js -是。命令db.system.profile.find({},{},{启用Utf8验证:true})从mongosh传输到node.js驱动程序。驱动程序发送到mongodb清除db.system.profile.find()。获取结果-任何数据。并对其进行验证(取决于enableUtf 8Validation)。Node.js驱动程序是错误源BSONError:BSON文档中的UTF-8字符串无效。不是mongodb,也不是mongosh。
    1.如何修复db.currentOp?Node.js驱动程序不允许我们使用此命令发送enableUtf 8Validation。但它可以处理mongodb连接字符串https://www.mongodb.com/docs/manual/reference/connection-string/中的选项。并且它可以在连接对象https://www.mongodb.com/docs/drivers/node/current/fundamentals/utf8-validation/中获取enableUtf 8Validation。因此,此URI格式适合我:mongosh mongodb://用户:通过@主机:端口/数据库?启用Utf8验证=假
    1.为什么坏数据被mongocxx驱动程序(或mongodb)捕获的问题仍然存在,但是connstr中的enableUtf 8Validation =false有助于绕过它来监视mongo操作。

相关问题