Как фильтровать и отсортировать массив объектов в массиве объектов в ArangoDB

Привет, у меня есть полезная нагрузка, как показано ниже:

{
  "Id": "3",
  "List": {
    "Steps": [
      {
        "StepId": "1",
        "stepDesc1": [
          {
            "sortNo": "2",
            "description": "ABC"
          },
          {
            "sortNo": "1",
            "description": "XYZ"
          }
        ],
        "stepDesc2": [
          {
            "sortNo": "2",
            "description": "AAA"
          },
          {
            "sortNo": "1",
            "description": "BBB"
          }
        ]
      },
      {
        "StepId": "2",
        "stepDesc1": [
          {
            "sortNo": "2",
            "description": "CCC"
          },
          {
            "sortNo": "1",
            "description": "DDD"
          }
        ],
        "stepDesc2": [
          {
            "sortNo": "2",
            "description": "EEE"
          },
          {
            "sortNo": "1",
            "description": "FFF"
          }
        ]
      }
    ]
  }
}

Я хочу ФИЛЬТРОВАТЬ по Id и StepId, отсортировать по SortNo и вернуть данные

Я использовал нижеприведенный запрос для фильтрации по Id и StepId

FOR test IN test_data
FILTER test.Id=='3' 
FILTER '1' IN test.List.Steps[*].StepId
SORT test.List.Steps[*].stepDesc1.sortNo ASC
RETURN test.Steps

но условие второго фильтра не работает и возвращает мне все шаги, соответствующие идентификатору 3. В моем случае он должен вернуться ниже o / p

{
        "StepId": "1",
        "stepDesc1": [
          {
            "sortNo": "2",
            "description": "ABC"
          },
          {
            "sortNo": "1",
            "description": "XYZ"
          }
        ],
        "stepDesc2": [
          {
            "sortNo": "2",
            "description": "AAA"
          },
          {
            "sortNo": "1",
            "description": "BBB"
          }
        ]
      }

Может ли кто-нибудь помочь мне с решением


person krishna    schedule 04.12.2019    source источник


Ответы (1)


Я считаю, что вы ищете что-то вроде этого. Поскольку второй ФИЛЬТР, который вы применяете, истинен, 1 действительно находится в массиве, но этот AQL не исключает 2. Это только говорит о том, что 1 должен присутствовать. Если вы зацикливаете вложенный массив - тогда вы можете использовать ==. Надеюсь это поможет.

FOR test IN test_data
   FILTER test.Id == '3' 
    FOR step IN test.List.Steps
        FILTER step.StepId == '1' 
        SORT step[*].stepDesc1.sortNo ASC

RETURN step
person literallypenguin    schedule 06.12.2019