#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"
},
...}]
Спасибо вам за любую помощь!