【问题标题】:AWS .NET SDK DynamoDB Filter expression by Map values doesn't return any dataAWS .NET SDK DynamoDB 按映射值过滤表达式不返回任何数据
【发布时间】:2023-02-10 00:46:42
【问题描述】:

我正在尝试从 DynamoDB 加载数据。 我使用 FilterExpression 和 KeyExpression。 如果我在顶层按简单值搜索,一切正常。 但是,当我尝试按嵌套地图值过滤记录时,我得到 0 条记录。

CurrentCase 是对象,Assignments 是Dictionary,Setup 是Enum。

这是我的代码:

`Expression filterExpression = new ();
        filterExpression.ExpressionAttributeNames["#Setup"] = "CurrentCase.Assignments.Setup";
        filterExpression.ExpressionAttributeValues[":userId"] = userId;
        filterExpression.ExpressionStatement = "#Setup = :userId";`

我尝试了另一种方法,没有帮助。 (WHERE CurrentCase.Assignments['Setup'] = 'Id' 在 PartyQL 中有效):

`Expression filterExpression = new ();
        filterExpression.ExpressionAttributeNames["#Setup"] = "CurrentCase.Assignments['Setup']";
        filterExpression.ExpressionAttributeValues[":userId"] = userId;
        filterExpression.ExpressionStatement = "#Setup = :userId";`

这就是我调用查询的方式

var queryOperationConfig = new QueryOperationConfig
        {
            PaginationToken = paginationToken,
            Limit = pageSize,
            IndexName = GlobalIndexNames.Cases,
            KeyExpression = keyExpression,
            FilterExpression = filterExpression
        };
    Search search = _dbContext.GetTargetTable<CaseEntity>().Query(queryOperationConfig);
            List<Document> documents = await search.GetNextSetAsync(cancellationToken);

我希望此请求返回 CurrentCase.Assignments['Setup'] 等于 userId 的所有记录

【问题讨论】:

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


    【解决方案1】:

    原谅我,我不是 .Net 编码员,但你的问题是这样的:

    filterExpression.ExpressionAttributeNames["#Setup"] = "CurrentCase.Assignments.Setup";
    

    您实际上是将 var #Setup 设置为 String "CurrentCase.Assignments.Setup"

    它应该是:

    ExpressionAttributeNames = new Dictionary<string, string>
                            {
                              { "#CurrentCase", "CurrentCase" },
                              { "#Assignments", "Assignments" },
                              { "#Setup", "Setup" }                     
                            }
    
    filterExpression.ExpressionStatement = "#CurrentCase.#Assignments#Setup = :userId";`
    

    您可能需要重组我给出的示例,但您应该明白了。

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      相关资源
      最近更新 更多