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

use*_*606 5 lambda amazon-web-services amazon-dynamodb

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

我的dynamodb表看起来像这样. 在此输入图像描述

现在我只是使用以下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);
        }
    });

};
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是基于查询的纬度和经度值的表在一定的半径比如3英里现在我知道如何使用MySQL做到这一点,但我真的想知道在哪里试图与dynamodb做到这一点的时候开始.

我真的无法在网上找到任何有用的教程有其他人这样做或正在这样做可以指向我正确的方向我会非常感激.

fil*_*tto 3

您可以使用如下表达式:

var queryData = {
        "TableName": tableName,
        "ConsistentRead": true,
        "KeyConditionExpression": "#latitude between :min and :max",
        "ExpressionAttributeNames": {
            "#latitude": "latitude",
        },
        "ExpressionAttributeValues": {
            ":min": [MIN_LATITUDE],
            ":max": [MAX_LATITUDE] 
        }
    };
Run Code Online (Sandbox Code Playgroud)

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