【发布时间】:2021-11-21 18:08:48
【问题描述】:
我正在开发一个 React Native 应用程序,它使用 Amplify API 连接到 DynamoDB 表。
我在应用程序中使用 DataStore 进行离线数据处理,有一段时间,应用程序的某些早期版本将 API 设置为不可同步,这导致我们的一些数据在没有 _version、_deleted 和 @ 的情况下保存987654323@ 字段。
我刚刚修复了错误以使 API 再次可同步,但我们的一些数据现在缺少这些字段,当我尝试从应用程序查询表时收到错误消息。
Object {
"locations": null,
"message": "Cannot return null for non-nullable type: 'Int' within parent 'Capture' (/listCaptures/items[18]/_version)",
"path": Array [
"listCaptures",
"items",
18,
"_version",
],
},
Object {
"locations": null,
"message": "Cannot return null for non-nullable type: 'AWSTimestamp' within parent 'Capture' (/listCaptures/items[18]/_lastChangedAt)",
"path": Array [
"listCaptures",
"items",
18,
"_lastChangedAt",
],
},
我不能只对数据库应用一次修复,因为那里有旧版本的客户端连接到数据库,不断生成缺少字段的记录。
我想在新版本的程序开始修复表中的“损坏”记录时进行某种检查,但首先我需要能够从应用程序中查询它。
这是我在 qraphql 架构中的一张表:
type DatabaseConversion @model {
id: ID!
userID: String!
ConversionID: String!
}
这是自动生成的查询,当缺少 _version、_deleted 或 _lastChangedAt 字段时会引发错误:
export const listDatabaseConversions = /* GraphQL */ `
query ListDatabaseConversions(
$filter: ModelDatabaseConversionFilterInput
$limit: Int
$nextToken: String
) {
listDatabaseConversions(
filter: $filter
limit: $limit
nextToken: $nextToken
) {
items {
id
userID
ConversionID
_version
_deleted
_lastChangedAt
createdAt
updatedAt
}
nextToken
startedAt
}
}
`;
我的问题是,我如何在模式中定义一个只查找必要字段的自定义查询,并且它可以找到所有记录而不会引发错误?
我想如果我尝试在新版本的应用程序中使用它的当前内容更新记录,那将自动创建缺失的字段。
【问题讨论】:
-
我遇到了同样的错误,我不知道我的配置可能不正确。你能指引我正确的方向吗?
-
我的 API 未设置为可同步。在此处添加“ResolverConfig”:amplify/backend/api/captureStore/transform.conf.json:{“Version”:5,“ElasticsearchWarning”:true,“ResolverConfig”:{“project”:{“ConflictHandler”:“AUTOMERGE” , "ConflictDetection": "版本" } } }
标签: amazon-web-services amazon-dynamodb schema amplify