mongodb - MongoDB 客户端字段级加密 (CSFLE) 限制对未加密集合的操作
问题描述
我的数据库包含 3 个集合:“患者”、“治疗师”、“订阅”。
我已经在数据库连接上配置了 CSFLE,提供了一个 json 模式,它仅在“患者”集合中的“名称”和“电子邮件”字段上定义字段级加密。
“患者”集合上的字段级加密/解密按预期工作。
但是,现在一个不相关的聚合查询失败并显示“MongoError:加密集合上的管道无法引用其他集合”。
对“治疗师”集合执行聚合查询时会发生此错误,其中包括来自“订阅”集合的 $lookup(不是错误提示的“在加密集合上”)。
CSFLE json 模式中既没有定义“治疗师”也没有定义“订阅”,也没有加密。我不明白为什么这个 $lookup 在未加密的集合上会导致错误。根据文档
仅当from集合与运行聚合所针对的集合匹配(即自查找操作)时,自动客户端字段级加密才支持 $lookup 和 $graphLookup 。
虽然在处理“患者”集合时限制可能是可以接受的,但我认为在处理其他非 CSFLE 集合时它是不可接受的。
我知道我可以创建 2 个单独的 MongoClient 实例,一个启用 CSFLE,一个不启用,并使用非 CSFLE 客户端进行 $lookup,但这会带来额外的复杂性,而且它似乎不是一个干净合理的解决方案大部头书。
顺便说一句,我使用的是 mongoose,但是直接使用 mongodb 时的行为是相同的。
你会说这是mongodb的一个错误吗?
任何建议将不胜感激。
解决方案
原来这是 MongoDB 的一个错误。
Jira 票证: https ://jira.mongodb.org/browse/SERVER-50092
这是当前的限制,其中使用加密客户端假定它是必要的并且不允许 $lookup 进入另一个集合。
当前的解决方法是使用非加密客户端进行此类聚合。
推荐阅读
- r - 是否可以从另一个 igraph 的顶点创建 igraph 对象?
- python-3.x - 如何根据从更具体的数据框派生的重叠日期创建聚合/汇总 pandas 数据框?
- python - 在一列中超过 20 行
- applescript - Applescript 多个“告诉应用程序”
- c - 为什么我的 C 程序不等待扫描输入?
- angular - 如何以角度正确地从拦截器调用服务方法
- docker - 为什么 docker-compose 卷没有正确安装?(我在 docker 中使用 nginx 和 certbot)
- kubernetes - Nginx 控制器的基于路径的路由不起作用
- uml - 如何建模一个简单的锻炼应用程序(类图)
- amazon-web-services - AWS Eventbridge 规则能否匹配数组内的对象