#graphql #amazon-dynamodb #aws-amplify #aws-appsync #aws-amplify-cli
#graphql #amazon-dynamodb #aws-amplify #aws-appsync #aws-amplify-cli
Вопрос:
Получение количества отсканированных, но не количества данных в соответствии с фильтром
count: null
items: [{id: "bcd75096-7fd9-4e9d-8675-6877f0609ac2", name: "dxfrdhjkhklklkl", description: "dgdxrfg",…},…]
0: {id: "bcd75096-7fd9-4e9d-8675-6877f0609ac2", name: "dxfrdhjkhklklkl", description: "dgdxrfg",…}
1: {id: "52f6ff60-fc07-4631-a1fb-b039f376ff21", name: "ghnfgyhj", description: "gyhkjmuhjolk",…}
2: {id: "f73dfb37-2778-4b87-88c7-e6f9f5b5c931", name: "drftgserty", description: "trse54rte54ty",…}
3: {id: "6df9f5c2-ec06-4e70-b5e2-133cb0d8e958", name: "tygujghukuh", description: "tuyjyuikuolnh",…}
4: {id: "9360a766-ac89-420c-881b-2b3089bcca7f", name: "kl;", description: "vcbghnjmk,l", is_active: true,…}
5: {id: "c0dcbaff-37d4-4e4c-9375-584ff7110d77", name: "dfhgbdcb", description: "dfxvcx", is_active: true,…},...
scannedCount: 100
Я следовал этим руководствам, чтобы подсчитать, КАК ПОДСЧИТАТЬ КОЛИЧЕСТВО РЕЗУЛЬТАТОВ С ПОМОЩЬЮ AWS AMPLIFY DYNAMODB И GRAPHQL
Фильтр
var body = {
filter: {
is_active: {
eq: true
}
}
}
Запрос для получения списка задач
export const listTodos = /* GraphQL */ `
query ListTodos(
$filter: ModelTodoFilterInput
$limit: Int
$nextToken: String
) {
listTodos(filter: $filter, limit: $limit, nextToken: $nextToken) {
count
items {
id
name
description
is_active
createdAt
updatedAt
}
scannedCount
}
}
`;
GraphQL shema
type Todo @model {
id: ID!
name: String!
description: String!
is_active: Boolean
}
type ModelTodoConnection {
items: [Todo]
scannedCount: Int
count: Int
total: Int
}
И ЕСЛИ я установлю ограничение на 5, и оно отправит обратно scannedCount
5, если у меня будет общее количество данных в базе данных около 110. Я хочу подсчитать данные, где is_active: { eq: true }
Комментарии:
1. Можете ли вы поделиться своей схемой graphql?
2. я обновил его
3. Я не думаю, что DynamoDB способен предоставлять точные подсчеты результатов для запросов GraphQL. Ссылка: проблема с общим количеством запросов GraphQL в репозитории Amplify CLI GitHub. Я также думаю, что оба запроса DynamoDB. Документация по подсчету и ссылка на сообщение в блоге вводят в заблуждение в этом вопросе.
4. Я пытаюсь получить решение за последние 4 дня, но ничего не получил
5. Да, я понимаю, почему. Чем больше я читаю об этом, тем больше кажется, что подсчет результатов запроса GraphQL является нерешенной проблемой DynamoDB. Поэтому я не думаю, что для этой проблемы существует готовое решение. Тем не менее, в ветке проблем есть несколько предложений, которые, возможно, стоит попробовать, если подсчет результатов запроса GraphQL является обязательным требованием.
Ответ №1:
Ознакомьтесь с пакетом, который я написал для решения этой проблемы: https://github.com/multimeric/AmplifyCountDirective .
После выполнения инструкций по установке, чтобы решить вашу проблему, я бы изменил схему на эту:
type Todo @model @count {
id: ID!
name: String!
description: String!
is_active: Boolean
}
Затем вы можете запросить количество, используя запрос GraphQL, такой как:
{
countTodo(filter: {
is_active: {
eq: true
}
})
}
Комментарии:
1. Извините, но я не понимаю … AppSync генерирует listTodo, вы можете вызвать его с любым фильтром и выводить только идентификационные номера. В приложении просто используйте length, и вы увидите общее количество.
2. Длина результирующего массива покажет вам только длину одной страницы данных. Этот пакет и его распознаватель вернут длину всей таблицы или запроса.
3. если вы не установили ограничение, вы получаете все страницы сразу.
4. Это не так. Если ваш набор данных превышает 1 МБ, он будет автоматически разбит на страницы DynamoDB. Есть причина, по которой этот поток привлекает такое внимание.