我的编程空间,编程开发者的网络收藏夹
学习永远不晚

使用golang检索dynamodb中的最新记录

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用golang检索dynamodb中的最新记录

一分耕耘,一分收获!既然打开了这篇文章《使用golang检索dynamodb中的最新记录》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我正在尝试检索插入到 dynamodb 表中的最新记录,表结构如下:

  • 日期(订单号)
  • id(分区键)
  • 价值

日期值是unix时间戳,这是一个示例json数据:

{
  "date": 1590312898,
  "id": "87a6614b-1d05-44af-ab4b-6bc0957796b3",
  "value": 36
}

我尝试使用 scaninput 函数将 limit 结果设置为 1,但我无法获得正确的顺序,因此我得到了错误的行。我尝试使用以下代码:

filt := expression.name("date").notequal(expression.value(nil))

    proj := expression.nameslist(expression.name("date"), expression.name("id"), expression.name("value"))

    expr, err := expression.newbuilder().withfilter(filt).withprojection(proj).build()

    if err != nil {
        fmt.println("got error building expression:")
        fmt.println(err.error())
    }

    // build the query input parameters
    params := &dynamodb.scaninput{
        limit:                     aws.int64(1),
        expressionattributenames:  expr.names(),
        expressionattributevalues: expr.values(),
        filterexpression:          expr.filter(),
        projectionexpression:      expr.projection(),
        tablename:                 aws.string(tablename),
    }

    // make the dynamodb query api call
    result, err := svc.scan(params)

也许我必须使用 scanindexforward 参数,但我不明白如何以正确的方式设置它。

有什么建议吗?这是正确的方法吗?

提前致谢

解决方案更新:

我必须使用 queryinput 而不是 scaninput 函数才能使用 scaninputforward,这是新代码:

var queryInput = &dynamodb.QueryInput{
            TableName: aws.String(tableName),
            KeyConditions: map[string]*dynamodb.Condition{
                "Type": {
                    ComparisonOperator: aws.String("EQ"),
                    AttributeValueList: []*dynamodb.AttributeValue{
                        {
                            S: aws.String("SM"),
                        },
                    },
                },
            },
            ScanIndexForward: aws.Bool(false),
            Limit:            aws.Int64(1),
        }

        result, err := svc.Query(queryInput)


解决方案


首先,由于您的日期是分区键,因此每当您在后端进行扫描时,DynamoDB 都会单独调用每个分区。无论返回的顺序如何,都将是响应中的顺序。

如果您想使用 ScanIndexForward 检索此内容,那么您将查看排序(或范围键)

指定索引遍历的顺序:如果为true(默认),则按升序进行遍历;如果为 false,则按降序进行遍历。

具有相同分区键值的项目按排序键按排序顺序存储。如果排序键数据类型为 Number,则结果按数字顺序存储。对于 String 类型,结果按 UTF-8 字节顺序存储。对于 Binary 类型,DynamoDB 将二进制数据的每个字节视为无符号。

我建议您了解如何重新构建 DynamoDB 表以使用 Global Secondary Index,该表将使用所有项目都使用的分区键以及日期的排序键。然后,您可以使用 ScanIndexForward 查询并检索最大值。

否则您将不得不执行扫描,然后按订单进行后处理。

理论要掌握,实操不能落!以上关于《使用golang检索dynamodb中的最新记录》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

使用golang检索dynamodb中的最新记录

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用golang检索dynamodb中的最新记录

一分耕耘,一分收获!既然打开了这篇文章《使用golang检索dynamodb中的最新记录》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给
使用golang检索dynamodb中的最新记录
2024-04-04

使用Pyinstaller的最新踩坑实战记录

前言 将py编译成可执行文件需要使用PyInstaller,之前给大家介绍了关于利用PyInstaller将python程序.py转为.exe的方法,在开始本文之前推荐大家可以先看下这篇文章,本文主要给大家介绍了Pyinstaller最新踩
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录