是否可以在AWS DynamoDB中运行大于查询?

时间:2020-05-29 15:58:58

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

假设我有这样的DynamoDB表,并且以Order ID作为主键。 :

table screenshot


每次我添加/放置新项目时,Order ID都会递增一。

现在,我有一个数字,比方说1000,我的用户希望获取所有具有Order ID > 1000的商品。 因此返回的项将是100110021003,依此类推,直到最后一个。


我的要求看起来很简单-但这可以与AWS DynamoDB的Query方法一起使用吗?

感谢您的帮助:) 谢谢!

2 个答案:

答案 0 :(得分:3)

目前无法过滤分区键,但是我可以建议一种可以实现所需功能的方法。

您正朝着Query正确的方向前进,"User ID" is userId and "From" > orderId具有“大于”运算符。但是,它仅对排序键属性起作用。

使用Query,您基本上可以选择一个分区键,并提供一个过滤表达式,该表达式将应用于该分区中项目的排序键。
由于您的分区键当前为“订单ID?”,因此您需要添加全局二级索引以查询所需的方式。

在不了解您的访问模式的情况下,建议您使用“发件人”作为分区键(我假设是用户ID)添加全局二级索引。然后,您可以使用“订单ID”作为排序键。

我的用户希望获取订单ID> 1000的所有商品。

有了GSI,您可以通过查询def initUI(self): self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.width, self.height) mainMenu = self.menuBar() fileMenu = mainMenu.addMenu('File') editMenu = mainMenu.addMenu('Edit') viewMenu = mainMenu.addMenu('View') toolsMenu = mainMenu.addMenu('Tools') helpMenu = mainMenu.addMenu('Help') ############################################## label = QLabel(self) label.setGeometry(10, 40, 480, 30) label.setStyleSheet("QLabel { background-color : white;}") label.setText("File path :{}".format(self.filename)) ############################################## button1 = QPushButton('Import file', self) button1.setToolTip('Import CSV file') button1.setGeometry(520, 40, 100, 30) button1.clicked.connect(self.openFileNameDialog) ############################################## button2 = QPushButton('Export file', self) button2.setToolTip('Export (.io, .eco, .v) files') button2.setGeometry(520, 420, 100, 30) button2.clicked.connect(self.on_click) 中的项目来实现此目的。

您可以找到有关查询here的更多信息,有关添加GSI here的详细信息,以及有关选择分区键here的更多信息。

答案 1 :(得分:1)

否,因为Query需要一个确切的键,并且不允许分区键使用表达式(但是排序键却允许)。

但是,您可以使用带有FilterExpressions的Scan(有关语法,请参见Filter Expressions for Scan Condition Expressions)。这将随后读取所有记录和筛选器,因此这不是最有效的方法。