AWS DynamoDB:查询适用于控制台,但不适用于 .NET 代码
AWS DynamoDB: query works on the console but not on .NET Code
我有一个 DynamoDB 查询,它在 AWS 控制台上运行良好,但在代码上运行不正常。
这是我在控制台上的查询:
现在这是我查询它的 C# 代码:
var query = new QueryOperationConfig
{
KeyExpression = new Expression
{
ExpressionStatement = "#pkey = :v_pkey and #skey >= :v_skey",
ExpressionAttributeNames = {
{ "#pkey", "MailingId" },
{ "#skey", "RegistroCarteiraId" },
},
ExpressionAttributeValues = new Dictionary<string, DynamoDBEntry>()
{
{ ":v_pkey", new Primitive("62", true) },
{ ":v_skey", new Primitive("00e0bbfc-aed0-4f0e-acef-a3623a9f9694") },
},
},
BackwardSearch = false,
ConsistentRead = true,
Limit = 1,
FilterExpression = new Expression
{
ExpressionStatement = "#psituacao = :v_psituacao and attribute_not_exists(#pdisponibilidade)",
ExpressionAttributeNames =
{
{ "#psituacao", "Situacao" },
{ "#pdisponibilidade", "Disponibilidade" }
},
ExpressionAttributeValues =
{
{ ":v_psituacao", new Primitive("1", true) },
}
}
};
var search = table.Query(query);
var docs = await search.GetNextSetAsync();
我没有收到任何错误,结果只有一个空数组。如果我将排序键更改为不同的值,它会起作用,但对于这个特定值它不会...
我已经弄了一整天了,没弄明白哪里出了问题。
任何帮助将不胜感激。
谢谢
问题是 LIMIT 1。
正如我发现的那样,过滤器只发生在获取的项目上,并且由于我只获取了 1 个项目,当发生过滤时,结果没有符合条件的记录。
删除限制 1 解决了问题。
我有一个 DynamoDB 查询,它在 AWS 控制台上运行良好,但在代码上运行不正常。
这是我在控制台上的查询:
现在这是我查询它的 C# 代码:
var query = new QueryOperationConfig
{
KeyExpression = new Expression
{
ExpressionStatement = "#pkey = :v_pkey and #skey >= :v_skey",
ExpressionAttributeNames = {
{ "#pkey", "MailingId" },
{ "#skey", "RegistroCarteiraId" },
},
ExpressionAttributeValues = new Dictionary<string, DynamoDBEntry>()
{
{ ":v_pkey", new Primitive("62", true) },
{ ":v_skey", new Primitive("00e0bbfc-aed0-4f0e-acef-a3623a9f9694") },
},
},
BackwardSearch = false,
ConsistentRead = true,
Limit = 1,
FilterExpression = new Expression
{
ExpressionStatement = "#psituacao = :v_psituacao and attribute_not_exists(#pdisponibilidade)",
ExpressionAttributeNames =
{
{ "#psituacao", "Situacao" },
{ "#pdisponibilidade", "Disponibilidade" }
},
ExpressionAttributeValues =
{
{ ":v_psituacao", new Primitive("1", true) },
}
}
};
var search = table.Query(query);
var docs = await search.GetNextSetAsync();
我没有收到任何错误,结果只有一个空数组。如果我将排序键更改为不同的值,它会起作用,但对于这个特定值它不会...
我已经弄了一整天了,没弄明白哪里出了问题。
任何帮助将不胜感激。
谢谢
问题是 LIMIT 1。
正如我发现的那样,过滤器只发生在获取的项目上,并且由于我只获取了 1 个项目,当发生过滤时,结果没有符合条件的记录。
删除限制 1 解决了问题。