簡體   English   中英

根據數組中的嵌套屬性過濾表達式 - DynamoDB

[英]Filter expression based on a nested attribute in an array - DynamoDB

我有一個DynamoDB表,我存儲了這些數據;

JSON數據

其中“device”是分區鍵,“datetime”是排序鍵。 我能夠根據PartitionKey和日期范圍(排序鍵)查詢數據。 但是現在,我需要根據“數據”里面的“端點”進行過濾,這是一個數組。 例如,我想僅在端點1存在於數據陣列中時檢索數據,或者例如,如果存在端點IN(1,3)。 我正在使用以下代碼;

 var dev = event.params.querystring.device; var from = event.params.querystring.from; var to = event.params.querystring.to; var ascord = event.params.querystring.ascord; var limit = event.params.querystring.limit; var qryParams = { TableName : "mytable", KeyConditionExpression: "#id = :dddd and #tm between :time1 and :time2", FilterExpression: "data.endpoint = :ep", ExpressionAttributeNames:{ "#id": "device", "#tm": "datetime" }, ExpressionAttributeValues: { ":dddd": dev, ":time1": from, ":time2": to, ":ep": 1 } }; docClient.query(qryParams, function(err, data){ if (err){ callback(err, null); }else { callback(null, data); } }) 

但它沒有檢索任何記錄。 我也試過使用占位符(#data。#endpoint)但是沒有用。 什么是正確的方法呢? 另外,我應該在表中為端點創建索引嗎?

謝謝你的幫助。 問候; 格斯

屬性data是對象列表。 因此,如果您不提供list屬性的數組索引,DynamoDB將無法找到該項。 如果您知道endpointvalue的值,則可以使用contains函數。

選項1 - 使用包含: -

var params = {
    TableName: table,
    KeyConditionExpression: "#id = :dddd and #tm between :time1 and :time2",
    FilterExpression: "contains (#data, :ep)",
    ExpressionAttributeNames: {
        "#id": "deviceid",
        "#tm": "datetime",
        "#data" : "data"
    },
    ExpressionAttributeValues: {
        ":dddd": "1",
        ":time1": "2017-08-22T00:44:11:424Z",
        ":time2": "2017-08-22T23:44:11:424Z",
        ":ep": {
            "endpoint": 1,
            "value": "23"
        }
    }
};

選項2 - 使用指數: -

var params = {
    TableName: table,
    KeyConditionExpression: "#id = :dddd and #tm between :time1 and :time2",
    FilterExpression: "#data"+"[0].endpoint = :ep",
    ExpressionAttributeNames: {
        "#id": "deviceid",
        "#tm": "datetime",
        "#data" : "data"
    },
    ExpressionAttributeValues: {
        ":dddd": "1",
        ":time1": "2017-08-22T00:44:11:424Z",
        ":time2": "2017-08-22T23:44:11:424Z",
        ":ep": 1
    }
};

暫無
暫無

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

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