Моя база данных содержит 3 коллекции: «пациенты», «терапевты», «подписки».
Я настроил CSFLE для соединения с базой данных, предоставив схему json, которая определяет шифрование на уровне поля только в полях «имя» и «электронная почта» в коллекции «пациенты».
Шифрование / дешифрование на уровне поля в коллекции «пациенты» работает должным образом.
Однако теперь несвязанный запрос на агрегирование завершается ошибкой «MongoError: конвейер по зашифрованной коллекции не может ссылаться на дополнительные коллекции».
Эта ошибка возникает при выполнении запроса агрегирования для коллекции «терапевтов», который включает поиск $ из коллекции 'subscriptions' (а не "по зашифрованной коллекции", как предполагает ошибка).
Ни «терапевты», ни «подписки» не определены в схеме CSFLE json, и не зашифрованы. Я не понимаю, почему этот поиск $ в незашифрованных коллекциях должен приводить к ошибке. Согласно документации
Automati c шифрование на уровне поля на стороне клиента поддерживает $ lookup и $ graphLookup , только если из * Коллекция 1023 * соответствует коллекции, в которой выполняется агрегирование (т.е. операции самопоиска).
Хотя ограничение может быть приемлемым при работе с коллекцией «пациенты», я не думаю, что это допустимо при работе с другими коллекциями, отличными от CSFLE.
Я знаю, что могу создать 2 отдельных экземпляра MongoClient, один с включенным CSFLE, а другой без, и использовать клиент без CSFLE для поиска $, но это внесло бы дополнительную сложность, и это не кажется мне чистым и разумным решением.
Кстати, я использую mon goose, но поведение такое же при использовании mongodb напрямую.
Вы бы сказали, что это ошибка mongodb?
Будем признательны за любые предложения.