Node.js-从AWS DynamoDB获取StringSet

时间:2016-06-24 13:04:59

标签: node.js amazon-web-services aws-lambda

我想将从andoid app发送的字符串与存储在StringSet中的DynamoDB中的字符串进行比较。我试过那段代码:

if (typeof event.keyWord != "undefined") { 

                var str = event.keyWord;
                str = str.toLowerCase();
                params.ExpressionAttributeValues[":keyWord"] = {"S": str};

                params.FilterExpression = params.FilterExpression + " and contains (#nm, :keyWord)";
            }

问题是,在StringSet的情况下,它寻找完美匹配。我想检查keyWord是否是StrinSet #nm中第二个字符串的一部分。如果需要,这是我的整个代码:

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

exports.handler = function(event, context) {


    var params = {
        TableName: "Events", //"StreamsLambdaTable",
        ProjectionExpression: "ID, description, endDate, imagePath, locationLat, locationLon, #nm",  
        FilterExpression: "locationLon between :lower_lon and :higher_lon and locationLat between :lower_lat and :higher_lat",
        ExpressionAttributeNames: {
            "#nm": "name",
        },
        ExpressionAttributeValues: {
             ":lower_lon": {"N": event.low_lon},
             ":higher_lon": {"N": event.high_lon}, 
             ":lower_lat": {"N": event.low_lat},
             ":higher_lat": {"N": event.high_lat}
        }
    };


     if (typeof event.keyWord != "undefined") { 

                var str = event.keyWord;
                str = str.toLowerCase();
                params.ExpressionAttributeValues[":keyWord"] = {"S": str};

                params.FilterExpression = params.FilterExpression + " and contains (#nm, :keyWord)";
            }


  db.scan(params, function(err, data) {
    if (err) {
      console.log(err); // an error occurred
      } 
    else {

        data.Items.forEach(function(record) {
            console.log(
                record.name.SS + "");
        });


        context.succeed(data.Items); // data.Items


      }
  });
};

1 个答案:

答案 0 :(得分:0)

我不认为您将能够单独使用DynamoDB执行此操作。我会调查integrating DynamoDB with ElasticSearch以提供这种文本搜索功能。