aws appsync объединяет операторы фильтров

Возможно ли в AWS appsync / ampify комбинировать операторы фильтров, например:

const filterInput = {
        or:[
          {
          and: [
                  {createdById: { eq: userID }},
                  {chatWithId: { eq: chatWithUser.id }}
                ]
          },
          {
          and:  [
                  {createdById: { eq: chatWithUser.id }},
                  {chatWithId: { eq: userID }}
                ]
          }
        ]
      }

Потому что для меня это не фильтрация / не работает должным образом.


person Ramon Postulart    schedule 29.01.2019    source источник
comment
Не могли бы вы предоставить немного дополнительной информации? Что не работает должным образом? Вы не видите записи, которые ожидаете увидеть? Я подозреваю, что это может быть связано с семантикой фильтра DynamoDB. Вы читали этот docs.aws.amazon.com/ amazondynamodb / latest / developerguide /?   -  person mparis    schedule 30.01.2019
comment
Я пытаюсь объединить фильтры операторов. Итак, я хочу фильтровать по первому И - ИЛИ - по второму И. И если они не существуют, не возвращайте записи. Я не знаю, можно ли добиться чего-то подобного и как это работает с усилением, или мне нужно найти другое решение.   -  person Ramon Postulart    schedule 30.01.2019
comment
Это объединит операторы фильтра, но если данные, удовлетворяющие выражению фильтра, разбросаны по всему вашему индексу DynamoDB, то Query.listX может не возвращать данные точно так, как вы ожидаете, из-за семантики выражений фильтра DynamoDB. Трудно сказать по предоставленным деталям, потому что я не знаю, какой запрос вы выполнили и какие результаты вы получили взамен, которые не соответствуют вашим ожиданиям. Похоже, вы пытаетесь смоделировать отношения «многие ко многим». НАПРИМЕР. Я хочу всех разговоров, в которых я участвую. Если это так, я могу дать совет по этому поводу.   -  person mparis    schedule 30.01.2019
comment
Это просто простая таблица в DynamoDB. Схема Graphql (ampify): введите Chat {id: ID! createdAt: String createdById: String chatWithId: String messsages: [Сообщение]}   -  person Ramon Postulart    schedule 31.01.2019


Ответы (1)


Спасибо за дополнительную информацию. Со схемой Amplify, которая выглядит так:

type Chat @model { 
  id: ID! 
  createdAt: String 
  createdById: String 
  chatWithId: String 
  messsages: [Message] 
}

По умолчанию для хранения значений создается таблица с ключом HASH, в котором хранятся значения id, и невозможно эффективно выполнить запрос, который вы пытаетесь выполнить, только с ключевой структурой по умолчанию. В будущем у вас будет больше инструментов для управления структурой индекса таблицы @model, но пока единственный способ сделать это - через @connection.

Вот пример схемы, которая может помочь вам приступить к созданию API-интерфейсов, которые могут более эффективно запрашивать эти отношения.

person mparis    schedule 01.02.2019