Создание нескольких агрегатов с помощью RestHeart
Я использую RestHeart, чтобы делать вызовы REST для запросов агрегации MOngoDB. Я пытаюсь создать несколько агрегаций как одноразовое действие, а затем выполнить их всякий раз, когда они понадобятся мне позже. В настоящее время я вижу, что одновременно создается только одна агрегация. Если я создаю новый, он перезаписывается.
Можно ли создать несколько агрегатов как одноразовое действие с другим URI?
Таким образом, я могу позже вызвать URI, и мне не придется каждый раз переписывать запросы агрегации.
1 ответ
RESTHeart позволяет определять агрегаты через свойство коллекции aggrs. Смотрите документацию здесь https://softinstigate.atlassian.net/wiki/x/AwDw
aggrs - это массив определений агрегации, например:
aggrs: [ { <aggregation_1> }, { <aggregation_2> }, ... ]
определение агрегации:
{
"type":"pipeline",
"uri": <uri>,
"stages": [
"<stage_1>",
"<stage_2>",
...
]
}
каждая агрегация связана с URI, указанным в определении, под /db/coll/_aggrs
, так:
GET /db/coll/_aggrs/aggreation1
GET /db/coll/_aggrs/aggreation2
Вы говорите, что ваша агрегация перезаписана, я подозреваю, что вы обновляете свою коллекцию, заменяя массив aggrs. Обязательно обновите свойства коллекции всеми вашими определениями агрегации в массиве aggrs.
Итак, чтобы создать первую агрегацию, используя блестящий инструмент httpie cli
http PATCH <ip>/db/coll aggrs:='[ {<aggregation_1>} ]'
Чтобы создать вторую агрегацию, вы можете передать весь массив aggrs:
http PATCH <ip>/db/coll aggrs:='[ {<aggregation_1>}, {<aggregation_2>} ]'
или добавьте второй в массив aggrs, используя оператор обновления $addToSet
http PATCH <ip>/db/coll aggrs:='{"$addToSet": {"aggrs": {<aggregation_2>}}}'