DynamoDB: Как добраться до вложенного объекта по идентификатору?C#

Место общения программистов C#
Ответить
Anonymous
 DynamoDB: Как добраться до вложенного объекта по идентификатору?

Сообщение Anonymous »

У меня есть две таблицы в DynamoDB:

Код: Выделить всё

[DynamoDBTable("TVShow")]
public class TVShow
{
[DynamoDBHashKey]
public string Id { get; set; }

[DynamoDBRangeKey]
public long Timestamp { get; set; }

[DynamoDBProperty]
public string Title { get; set; }

[DynamoDBProperty]
public double Rate { get; set; }

[DynamoDBProperty("Episodes")]
public List Episodes { get; set; }
}

[DynamoDBTable("Episode")]
public class Episode
{
[DynamoDBHashKey]
public string Id { get; set; }

[DynamoDBRangeKey]
public long Timestamp { get; set; }

[DynamoDBProperty]
public string Title { get; set; }
}
Пример данных:

Код: Выделить всё

{
"Episodes": {
"L": [
{
"M": {
"Id": {
"S": "8ab47e73-188c-43e5-8010-1e22a982bb28"
},
"Timestamp": {
"N": "636830978394004950"
},
"Title": {
"S": "First Episode"
}
}
},
{
"M": {
"Id": {
"S": "c477e288-37d1-4d7f-9104-9b72ed304808"
},
"Timestamp": {
"N": "636830978394669182"
},
"Title": {
"S": "Second Episode"
}
}
}
]
},
"Id": {
"S": "466d8a18-f998-49b3-a299-90b508dba045"
},
"Rate": {
"N": "9.3"
},
"Timestamp": {
"N": "636830978390056778"
},
"Title": {
"S": "Vikings"
}
}

Идентификатор: HASH | Ключ раздела

Отметка времени: ДИАПАЗОН | Ключ сортировки


И я хочу получить вложенный объект «Episode First» TVShow по идентификатору [Episode].

Я пробовал много способов получить данные. Но не сработало. Это мои источники. Эти документы не актуальны. Я использую пакет nuget AWSSDK.DynamoDBv2 версии 3.3.16.5.

Запрос таблиц и индексов: .NET
https://docs.aws.amazon.com/en_us/amazo ... rying.html

Сканирование таблиц и индексов: .NET
https://docs.aws.amazon.com/en_us/amazo ... nning.html

Код: Выделить всё

// I can get the TVShow by Id with this.
var scanRequest = new ScanRequest(nameof(TVShow))
{
FilterExpression = "Id = :Id",
ExpressionAttributeValues = new Dictionary
{
{":Id", new AttributeValue {S = "466d8a18-f998-49b3-a299-90b508dba045"}}
}
};

// In the document scan is not async but in v3.3.16.5 scan is async.
var scanResponse = await Client.ScanAsync(scanRequest);

// I can get the TVShow by Id with this.
var queryRequest = new QueryRequest(nameof(TVShow))
{
KeyConditionExpression = "Id = :Id",
ExpressionAttributeValues = new Dictionary
{
{":Id", new AttributeValue {S = "466d8a18-f998-49b3-a299-90b508dba045"}}
}
};

// In the document query is not async but in v3.3.16.5 query is async.
var queryResponse = await Client.QueryAsync(queryRequest);
Здесь все в порядке. Но, как я уже сказал, я хочу фильтровать по идентификатору вложенного объекта или другому полю, например заголовку. Каков наилучший способ для этого? Если это возможно, как класс Table.

Подробнее здесь: https://stackoverflow.com/questions/541 ... ject-by-id
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»