MongoDB客户端字段级加密(CSFLE)限制对未加密集合的操作

MongoDB客户端字段级加密(CSFLE)限制对未加密集合的操作,mongodb,mongoose,Mongodb,Mongoose,我的数据库包含3个集合:“患者”、“治疗师”、“订阅” 我在db连接上配置了CSFLE,提供了一个json模式,该模式仅在“患者”集合中的“姓名”和“电子邮件”字段上定义字段级加密 “患者”集合上的字段级加密/解密按预期工作 但是,现在一个不相关的聚合查询失败,出现“MongoError:加密集合上的管道无法引用其他集合。” 在“therapists”集合上执行聚合查询时会发生此错误,该集合包括来自“subscriptions”集合的$lookup(而不是错误建议的“在加密集合上”) CSFLE

我的数据库包含3个集合:“患者”、“治疗师”、“订阅”

我在db连接上配置了CSFLE,提供了一个json模式,该模式仅在“患者”集合中的“姓名”和“电子邮件”字段上定义字段级加密

“患者”集合上的字段级加密/解密按预期工作

但是,现在一个不相关的聚合查询失败,出现“MongoError:加密集合上的管道无法引用其他集合。”

在“therapists”集合上执行聚合查询时会发生此错误,该集合包括来自“subscriptions”集合的$lookup(而不是错误建议的“在加密集合上”)

CSFLE json模式中既没有定义“治疗师”也没有定义“订阅”,并且没有加密。 我不明白为什么对未加密的集合进行$lookup会导致错误。 根据

自动客户端字段级加密支持$lookup和 $graphLookup仅当来自的集合与上的集合匹配时 聚合所针对的对象(即自查找操作)

虽然在处理“患者”收集时,限制可能是可以接受的,但我认为在处理其他非CSFLE收集时,限制是不可接受的

我知道我可以创建两个独立的MongoClient实例,一个启用CSFLE,一个不启用,并使用非CSFLE客户端进行$lookup,但这会带来额外的复杂性,而且对我来说,这似乎不是一个干净合理的解决方案

顺便说一句,我使用的是mongoose,但是直接使用mongodb的行为是一样的

你会说这是mongodb的一个bug吗


任何建议都将不胜感激。

这是MongoDB的一个bug

吉拉机票:

这是当前的一个限制,即使用加密客户端假定它是必要的,并且不允许$lookup进入另一个集合


当前的解决方法是使用非加密客户端进行此类聚合。

请在服务器版本的同时添加一个mcve来演示此问题(我建议使用mongo shell)。