查询AWS DynamoDB以返回半径内的lat和lon结果

时间:2016-07-10 20:43:22

标签: amazon-web-services lambda amazon-dynamodb

我对dynamodb很新,我用lambda和api网关设置它。

我的dynamodb表看起来像这样。 enter image description here

现在我只是使用以下lambda函数查询表。

var AWS = require('aws-sdk');
var dynamoDB = new AWS.DynamoDB();

exports.handler = function(event, context) {

    /**
     * Debugging events
     * @type {[type]}
     */
    console.log("Request received:\n", JSON.stringify(event));
    console.log("Context received:\n", JSON.stringify(context));

    /**
     * Important this needs to be your Dynamo DB table name
     * @type {String}
     */
    var tableName = "Tracker";
    var datetime = new Date().getTime().toString();

    var queryData = {
        "TableName": tableName,
        "ConsistentRead": true,
        "KeyConditionExpression": "TrackIt = :val",
        "ExpressionAttributeValues": {":val": {"S": event.tid}}
    };
    dynamoDB.query(queryData, function(err, data) {
        if (err) {
            context.fail('ERROR: Dynamo failed: ' + err);
        }else{
            context.done(null,data.Items);
        }
    });

};

现在我要做的是根据特定半径中的纬度和经度值查询表格,比如3英里,现在我知道如何用mysql做这个,但我真的想知道在尝试时从哪里开始这与dynamodb。

我真的无法在网上找到任何有用的教程,其他任何人都这样做或者这样做可以指出我正确的方向,我真的很感激。

2 个答案:

答案 0 :(得分:3)

您可以使用以下表达式:

var queryData = {
        "TableName": tableName,
        "ConsistentRead": true,
        "KeyConditionExpression": "#latitude between :min and :max",
        "ExpressionAttributeNames": {
            "#latitude": "latitude",
        },
        "ExpressionAttributeValues": {
            ":min": [MIN_LATITUDE],
            ":max": [MAX_LATITUDE] 
        }
    };

有关详细信息:http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.NodeJs.04.html

答案 1 :(得分:0)

如果您需要经常支持地理空间查找用例,我不知道Dynamo将是一个很好的解决方案。您可能会考虑更直接支持地理空间功能的数据库解决方案。