2017-06-27 1 views
0

動作しないと私は理解できませんこれら:DynamoDBのをattribute_existsはこれで数時間のために私の頭を叩いて

{ 
    gateway: 'gateway1', 
    device_id: '2', 
    state: { temperature: 20, humidity: 30, pressure: 101049 }, 
    timestamp: 1498331237261 
}, 
{ 
    gateway: 'gateway1', 
    device_id: '2', 
    state: { temperature: 20, humidity: 30, pressure: 101049, lat: 2, long: 1 }, 
    timestamp: 1498331237262 
} 

プライマリパーティションキー:device_id(文字列)

プライマリソートキー:timestamp(番号)

latlongの属性を持つ特定のデバイスの最新のアイテムを取得しようとしています。

const docClient = new AWS.DynamoDB.DocumentClient(); 
const id = 2; 
const params = { 
    TableName: 'device_telemetry', 
    KeyConditionExpression: 'device_id = :id', 
    ProjectionExpression: '#s, #lat, #lng, #ts', 
    FilterExpression: 'attribute_exists(#lat) AND attribute_exists(#lng)', 
    ExpressionAttributeNames: { 
     '#s': 'state', 
     '#lat': 'state.lat', 
     '#lng': 'state.long', 
     '#ts': 'timestamp' 
    }, 
    ExpressionAttributeValues: { 
     ':id': id.toString() 
    }, 
    ScanIndexForward: false, 
     Limit: 1 
    }; 

    const onResult = (res) => { 
     console.info('devices res for: ', id, res); 
    }; 

    console.info('query: ', params); 
    docClient.query(params).promise().then(onResult); 

私はattribute_exists(#s)を使用している場合、それは動作しますが、#latまたは#longことが

私が間違って何をしていないのですか?

答えて

0

私は、項目の属性を地図値の属性であるstateと混合しているようです。 生成された結果を見ていると混乱しました。

申し訳ありません。

関連する問題