我的数据库包含3个集合:“患者”,“治疗师”,“订阅”。
我已经在db连接上配置了CSFLE,提供了一个json模式,该模式仅仅定义了“患者”集合中“名称”和“电子邮件”字段的字段级别加密。
“患者”集合的字段级加密/解密按预期方式工作。
但是,现在一个不相关的聚合查询失败,并显示“ MongoError:加密集合上的管道无法引用其他集合。”
在“治疗师”集合上执行聚合查询时会发生此错误,其中包括“订阅”集合中的$查找(错误提示不是“在加密集合上”)。
在CSFLE json模式中未定义“治疗师”或“订阅”,并且未加密。 我不明白为什么对未加密的集合进行$ lookup会导致错误。 根据{{3}}
自动客户端字段级加密支持$ lookup和 仅当 from 集合中的与以下位置的集合匹配时,$ graphLookup 聚合所依据的(即自查找操作)。
虽然在处理“患者”馆藏时可以接受该限制,但是在处理其他非CSFLE馆藏时我认为这是不可接受的。
我知道我可以创建2个单独的MongoClient实例,一个实例启用CSFLE,一个实例不启用,并使用非CSFLE客户端进行$ lookup,但这会带来额外的复杂性,而且看起来不太干净和合理的解决方案。
顺便说一句,我正在使用猫鼬,但是直接使用mongodb时的行为是相同的。
您会说这是mongodb的错误吗?
任何建议将不胜感激。
答案 0 :(得分:1)
事实证明这是MongoDB的错误。
吉拉门票: https://jira.mongodb.org/browse/SERVER-50092
这是当前的局限性,在这种情况下,使用加密客户端会认为它是必要的,并且不允许$ lookup进入另一个集合。
当前的解决方法是使用非加密客户端进行此类聚合。