meinen Kopf hämmern für ein paar Stunden mit diesem und ich kann nicht verstehen, warum es nicht istDynamoDB attribute_exists funktioniert nicht
ArbeitsIch habe eine DynamoDBv2 Tabelle (Top-Level-Attribute werden als separate Spalten dargestellt) mit Gegenständen wie diese:
{
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
}
Primäre Partition Schlüssel: device_id
(String)
Primäre Sortierschlüssel: timestamp
(Number)
Ich versuche, das neueste Element für ein bestimmtes Gerät mit den Attributen lat
und long
zu erhalten.
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);
Wenn ich attribute_exists(#s)
verwenden, dann funktioniert es, aber für #lat
oder #long
es nicht
Was mache ich falsch?