如何在DynamoDB中选择扫描中的嵌套属性?

时间:2016-03-11 00:22:34

标签: c# amazon-web-services amazon-dynamodb

我意识到这已在documentation中得到解答(基本上,"使用点语法"),但我仍然遗漏了一些东西。我使用.NET SDK并且需要能够从扫描中选择一些属性,其中一个属性是Map属性中的布尔值。请注意,我没有尝试过滤结果。我想要所有的项目,但我只想要一些属性返回给我。

var config = new ScanOperationConfig
{
    AttributesToGet = new List<string> { "foo.bar" },
    Select = SelectValues.SpecificAttributes
};
var search = Table.Scan(config);
var documents = await search.GetRemainingAsync();

此代码为我提供了我期望的项目,但它缺少了&#34; foo.bar&#34;属性。我知道我可以选择整个foo对象,但我试图尽量减少回传的数据量。我不想要foo对象中的其他属性。

该项的相关属性具有以下JSON格式:

{
    "foo": {
        "bar": true
    }
}

我检查拼写,区分大小写等无济于事。知道什么是错的吗?

1 个答案:

答案 0 :(得分:2)

不使用Table.Scan,而是使用AmazonDynamoDBClient,您可以获得更多选项。

客户的ScanAsync方法使用ScanRequest字符串ProjectionExpression。这在ScanOperationConfig类中不存在,这是混淆的来源。

像这样使用ProjectionExpression

var scanRequest = new ScanRequest(Table.TableName)
{
    ProjectionExpression = "foo.bar"
};

根据ProjectionExpression上的文件:

  

ProjectionExpression取代了旧的AttributesToGet参数。

我没有意识到AttributesToGet是遗留问题,直到最终查看客户端是否存在完全不相关的问题,并碰巧找到了我对这个问题的答案。