Есть ли способ выполнить агрегацию с помощью MongoEngine без реализации пользовательских операций поиска $для разыменования объектов?

#mongodb #flask #aggregate #dereference #flask-mongoengine

Вопрос:

Я работаю над сервисом flask, который взаимодействует с MongoDB с помощью MongoEngine, и я надеюсь использовать поиск по Атласу для выполнения нечеткого поиска коллекции, разбивая вывод на страницы для отображения на интерфейсе.

MongoEngine предоставляет метод функции objects() для документа, который я в данный момент вызываю

 Document.objects().search_text('text')
 

далее для поиска по коллекции на основе предоставленного текста. Это возвращает массив объектов документа с полями, которые лениво разыменовываются.

Схема вывода определяется определением схемы для связанного класса документов; желаемый результат заключается в том, чтобы схема вывода документов, возвращаемых из aggregate, была такой же, как и при вызове search_text.

Однако, позвонив

 Document.objects().aggregate(pipeline)
 

возвращает курсор команды pymongo для оцененных словарей. Любые поля ссылок в результирующей агрегации не разыменовываются (как в search_text). Я надеюсь создать абстрактную функцию для использования поиска по Атласу, которая не потребует пользовательских определений конвейера агрегации для каждой схемы.

Кто-нибудь знает о более разумном способе построения конвейера агрегации без указания требований к разыменованию?

т. е. aggregate возвращает документы в этом формате (Нежелательные)

 [{ ...
        "_id": {
            "$oid": "5ef16374b3a431e671846ff6"
        },
       "arbitrary_field_name": {
            "$ref": "other_collection",
            "$id": {
                "$oid": "5f23a2f515718c8aa3e40541"
            }
        },
...}]
 

search_text возвращает документы в этом формате (желательно)

 [{ ...
       "id": "5ef16374b3a431e671846ff6",
       "arbitrary_field_name": {
            "name": "General",
            "id": "5f23a2f515718c8aa3e40541"
        },
...}]
 

Спасибо вам за любую помощь!