当前位置: 首页 > 知识库问答 >
问题:

AWS DynamoDB节点。js扫描-一定数量的结果

宰父才
2023-03-14

我尝试使用lambda AWS从DynamoDB获得满足条件的前10项。我试图使用极限参数,但它是(基于该网站)

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#scan-财产

“要评估的最大项目数(不一定是匹配项目数)”。

如何获得满足我条件的10件首批产品?

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, startDate, #tp, userLimit",  //specifies the attributes you want in the scan result.
    FilterExpression: "locationLon between :lower_lon and :higher_lon and locationLat between :lower_lat and :higher_lat",
    ExpressionAttributeNames: {
        "#nm": "name",
        "#tp": "type",
    },
    ExpressionAttributeValues: {
        ":lower_lon": {"N": event.low_lon},
        ":higher_lon": {"N": event.high_lon}, //event.high_lon}
        ":lower_lat": {"N": event.low_lat},
        ":higher_lat": {"N": event.high_lat}
    }
};

  db.scan(params, function(err, data) {
    if (err) {
      console.log(err); // an error occurred
      } 
    else {
      data.Items.forEach(function(record) {
           console.log(
                record.name.S + "");
        });
        context.succeed(data.Items);


      }
  });
};

共有1个答案

秦英发
2023-03-14

我想你已经知道了这背后的原因:DynamoDB在ScannedCount和Count之间的区别。据此,

ScannedCount-在将任何过滤器表达式应用于结果之前查询或扫描的项目数。

Count-响应中返回的项目数。

修复方法记录在以下内容的正上方:

对于查询或扫描操作,如果操作未返回表中的所有匹配项,DynamoDB可能会返回LastEvaluatedKey值。要获取匹配项的完整计数,请从上一个请求中获取LastEvaluatedKey值,并将其用作下一个请求中的ExclusiveStartKey值。重复此操作,直到DynamoDB不再返回LastEvaluatedKey值。

因此,您的问题的答案是:使用DynamoDB响应中的LastEvalatedKey并再次扫描。

 类似资料:
  • 最近看到一个视频直播,会实时公布魔法上网的免费节点,博主说是通过扫描节点获取的,请问一下具体是什么原理,是通过什么方式扫描的?

  • 对于何时选择GSI或其他方式的全表扫描,是否有任何衡量标准? 我知道两者背后的基本概念,但GSI的定价模型非常依赖于表格本身,我很难决定 更重要的是,如何在不同的表大小下进行扩展,或者多少扫描效率太低,而需要GSI 顺便说一下,我很难找到好的资源来过滤表达式,以便在dynamodb上进行查询和扫描,有什么好的建议吗?(“#v

  • 我必须使用扫描仪输入未知数量的数字。一旦用户输入-1,程序需要打印输入的所有数字的总和,然后结束程序。总和中需要包含-1。 我不能得到正确的总数。有人能帮忙吗?

  • 我正试图向SonarQube添加自定义度量,但每次运行传感器时都会出现以下错误: 我所做的是在管理接口中创建一个自定义度量,将其valuetype设置为Integer,并使用其键将计算值添加到传感器中的。

  • AWS描述 单个扫描请求可以消耗(1 MB页面大小/4 KB项目大小)/2(最终一致读取)=128次读取操作。https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-query-scan.html 128似乎是Scan命令一次可以读取的最大容量。 然而,当我进行测试时,扫描命令(最终一致,没有任何过滤器选项)总是以11

  • 我正在尝试迭代结果数组变量。 我可以在函数内部获取数组值,但是当我尝试在函数外部记录它时,它会显示null。 我在谷歌上搜索了几个帖子,我看到foreach不被推荐,建议是for循环,我甚至尝试过,结果为空。 游标中的问题是什么。forEach()。。。 日志结果: