1

У нас есть операция агрегации, которая работала в Restheart 1.1.0, но теперь она не в 2.0.2. Мы использовали переменные в операции агрегации для обработки динамического кода. Ниже приведен простой пример. Есть ли обходной путь для этой проблемы?restheart 2 - Ошибка агрегирования

Вот операция агрегации:

{ 
     "type" : "pipeline", 
     "uri" : "agg_companies", 
     "stages" : [ 
      { 
       "_$match" : { 
        "_$var" : "filter_query" 
       } 
      }, 
      { 
       "_$group" : { 
        "_id" : "$organization._id", 
        "name" : { 
         "_$first" : "$organization.name" 
        } 
       } 
      }, 
      { 
       "_$sort" : { 
        "name" : NumberInt(1) 
       } 
      } 
     ] 
    } 

Я делаю запрос к агрегации с помощью узла со следующим:

Это работает:

var avars = {filter_query: {travelerLastName: "Brewer"}}; 

Это не удается:

var avars = {filter_query: {travelerLastName: {$and: ["Brewer"]}}}; 

Ошибка:

{ "_links" : { "self" : { "href" : "/foresiteamo/flight/_aggrs/agg_companies2"}} , "http status code" : 400 , "http status description" : "Bad Request" , "message" : "illegal avars paramenter: {\'filter_query\':{\'travelerLastName\':{\'$and\':[\'Brewer\']}}}" , "_embedded" : { "rh:exception" : [ { "exception" : "java.lang.SecurityException" , "exception message" : "aggregation variables cannot include operators"}]}} 

ответ

0

RESTHeart не позволяет авары включать операторы (любой ключ, который начинается с $).

это по дизайну, чтобы клиент не вводил логику в агрегацию и, в конечном счете, ее модифицировал.

Подумайте о операторе $ lookup, который может использоваться для отслеживания ограниченных данных ...