簡體   English   中英

根據bool值查詢dynamodb

[英]Query dynamodb based on bool value

我有以下按預期工作的查詢:

var request = new QueryRequest {
        TableName = aTableName,
        KeyConditionExpression = "Username = :v_Username",
        ExpressionAttributeValues = new Dictionary<string, AttributeValue> {
        {
           ":v_Username", new AttributeValue { S =  "admin@admin.com" }}}
        };
        var response = await _client.QueryAsync(request);

我的表中有一列名為 IsAdmin 的布爾值。 當我嘗試對 IsAdmin = true 的所有行執行相同的查詢時,我沒有得到任何結果。

var request = new QueryRequest {
        TableName = aTableName,
        KeyConditionExpression = "IsAdmin = :v_IsAdmin",
        ExpressionAttributeValues = new Dictionary<string, AttributeValue> {
        {
           ":v_IsAdmin", new AttributeValue { BOOL =  true }}}
        };
        var response = await _client.QueryAsync(request);

我不明白為什么這行不通?

您不能對不是分區鍵的屬性執行查詢。

通常您會創建一個 GSI 以允許您查詢不是鍵的屬性,但在您的情況下,不允許將 bool 作為分區鍵:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html

您需要在當前場景中Scan表並使用 FilterExpression,這將導致讀取表中的每個項目,效率低下且不可擴展。

我能給出的最佳建議是對isAdmin使用字符串值。 只有在為真時才為其設置一個值。 isAdmin上創建一個 GSI,這將為您提供一個僅包含管理員人員的稀疏索引。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-general-sparse-indexes.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM