При использовании Pyeve возможно ли передавать параметры в конвейер агрегации при использовании get_internal?

#python #mongodb #eve

#python #mongodb #eve

Вопрос:

Я пытаюсь вызвать конвейер агрегации с параметрами как часть моего серверного кода в eve.

Документация и код на [github]https://github.com/pyeve/eve/blob/master/eve/methods/get.py#L122 предполагает, что я должен иметь возможность вызывать конвейер с помощью get_internal, и он должен выполняться с переданными ему параметрами.

Я пытался

get_internal("pipeline", **{'_id': id, 'time': time})

но похоже, что параметры _id и time не передаются в агрегированный запрос.

Я убедился, что конвейер работает, посетив URL-адрес конвейера

<baseurl>?aggregate={"_id":"5fa904807d3037e78023a5192,"time":1604827480260}

но я бы предпочел вызывать его из кода на стороне сервера, а не делать запрос, если это возможно.

Есть ли что-то очевидное, что я здесь делаю неправильно.

Спасибо

Ответ №1:

К сожалению, вы не можете использовать параметры с get_internal агрегацией и . _perform_aggregation использует только неизменяемый объект запроса при _perform_find слиянии where объекта запроса с вашими lookup параметрами с $and помощью .

Вы могли бы выполнить http-запрос к URL-адресу, как показано на рисунке, или вы могли бы использовать app.data.driver и вручную выполнить запрос агрегации, импортировав конвейер и изменив его вручную:

 from Flask import current_app as app
from domain.yourcollection import my_eve_aggregation #  Import the aggregation definition

# Get the aggregation pipeline
pipeline = my_eve_aggregation['datasource']['aggregation']['pipeline']

# Replace parameters - you need to manually replace the correct stages
pipeline[0]['$match'] = {'_id':'5fa904807d3037e78023a5192','time':1604827480260}

# Get the mongo collection
datasource = my_eve_aggregation['datasource']['source']

# Set db collection
col = app.data.driver.db[datasource]

result = list(col.aggregate(pipeline))
  

И, пожалуйста, создайте проблему в https://github.com/pyeve/eve/issues для этой отсутствующей функции