2016-04-28 58 views
2

根據我的理解。 甲查詢操作將尋求上所提到的索引結果,直到以下條件之一被滿足DynamoDB queryPage操作FilterExpression返回空結果以及lastEvaluatedKey

  • 結果集被耗盡。
  • 檢索的項數達到Limit參數的值(如果指定)。
  • 檢索的數據量達到1 MB的最大結果集大小限制。 記錄在案Here

所以DynamoDB查詢將擷取結果按照上述標準,然後將應用FilterExpression所以這是很可能的,它可能不是任何結果返回給你,所以它會返回空集和LastEvaluatedKey

但我也看在documentation

以下不同的掃描操作,查詢操作從未同時返回一個空的結果集和LastEvaluatedKey值。

有人可以幫助解釋上述文件聲明實際上是什麼意思嗎?

因爲在實踐中,當用戶我queryPage API與限制FilterExpression我得到的它的對面,即我正在一個空集以及LastEvaluatedKey。

我的上述理解是否正確?有可能得到一個空結果和lastEvaluatedKey值?或者我缺少某些東西,因爲我得到的是空的結果? (根據文檔,我不應該得到它,這將是很好,如果我沒有得到空的結果)

+0

你可能會得到鑰匙,但你在lastEvaluatedKey中獲得價值嗎? –

+0

是的。我正在獲得價值。 – manyu

回答

0

我也遇到同樣的問題,你閱讀文檔後,我找到以下說明解釋原因。根據Amazon文檔,「在查詢操作中,DynamoDB以排序順序檢索項目,然後使用KeyConditionExpression和任何可能存在的FilterExpression處理項目。」

因此它解釋了爲什麼你會得到這些結果。查詢結果後處理過濾器操作,因此無論您是否應用FilterExpression,查詢操作都沒有差異,這就是爲什麼您會看到lastEvaluatedKey被呈現,並且與沒有應用FilterExpression的操作沒有區別。

因此,要實現所需內容的唯一可能方式是使用全局二級索引,要過濾的列,可以將其作爲排序鍵。在這種情況下,您可以使用RangeKeyCondition()進行查詢。