假设我有这样的DynamoDB表,并且以Order ID
作为主键。 :
每次我添加/放置新项目时,Order ID
都会递增一。
现在,我有一个数字,比方说1000
,我的用户希望获取所有具有Order ID
> 1000
的商品。
因此返回的项将是1001
,1002
,1003
,依此类推,直到最后一个。
我的要求看起来很简单-但这可以与AWS DynamoDB的Query
方法一起使用吗?
感谢您的帮助:) 谢谢!
答案 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)
中的项目来实现此目的。
答案 1 :(得分:1)
否,因为Query
需要一个确切的键,并且不允许分区键使用表达式(但是排序键却允许)。
但是,您可以使用带有FilterExpressions的Scan
(有关语法,请参见Filter Expressions for Scan
和Condition Expressions)。这将随后读取所有记录和筛选器,因此这不是最有效的方法。