我意识到这已在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
}
}
我检查拼写,区分大小写等无济于事。知道什么是错的吗?
答案 0 :(得分:2)
不使用Table.Scan
,而是使用AmazonDynamoDBClient
,您可以获得更多选项。
客户的ScanAsync
方法使用ScanRequest
字符串ProjectionExpression
。这在ScanOperationConfig
类中不存在,这是混淆的来源。
像这样使用ProjectionExpression
:
var scanRequest = new ScanRequest(Table.TableName)
{
ProjectionExpression = "foo.bar"
};
根据ProjectionExpression
上的文件:
ProjectionExpression取代了旧的AttributesToGet参数。
我没有意识到AttributesToGet
是遗留问题,直到最终查看客户端是否存在完全不相关的问题,并碰巧找到了我对这个问题的答案。