即使电影在表中,我下面的.Net代码始终返回search.Matches.Count为0。我从字面上搜索了整个互联网,但即使在Amazon的AWS Developer网站上也无法获得答案。
请让我知道我在做什么错?我感谢您的帮助。我对此完全陌生。
client = New AmazonDynamoDBClient(config)
table = Table.LoadTable(client, "MovieTable")
scanFilter = New ScanFilter
With scanFilter
.AddCondition("KeyCode", ScanOperator.NotEqual, MovieName)
.AddCondition("Status", ScanOperator.Equal, "In")
End With
search = table.Scan(scanFilter)
If search.Matches.Count = 1 then getMovieName
答案 0 :(得分:1)
正如the documentation所解释的,“扫描”是一种应该遍历整个数据库的功能,无法一口气遍历整个数据库。取而代之的是,它一次要经过1MB,然后在经过1MB数据后返回给调用者,您应该要求在下一页继续(再次,请参见有关操作方法的文档)。
在您的情况下,您有一个非常具体的过滤器,该过滤器仅匹配一个项目,但仍然-在读取 1MB数据后,即使该1MB中的任何项目都不与您的数据匹配,扫描都将返回请求。它不会等到收集到1MB的结果!因此,在您的用例中,您会得到一个空的结果集,这并不奇怪,其中LastEvaluatedKey
的集表示要读取的页面更多。
顺便说一句在用例中,您只需要查找一项,对整个数据库进行扫描显然不是一个好选择(除非您仅在调试时这样做)。如果可以的话,GetItem或Query操作将更有意义,并且如果您按键中以外的项目进行搜索,则二级索引可能会有用。