2012-09-18 38 views
2

我與boto使用dynamoDB,並在我的表的設計/查詢中有一點問題。查詢與非散列鍵字段dynamoDB(與boto/python)

我想我的數據看起來像

+---------------------------------------+ 
hash_key account_id mykey 
----------------------------------------- 
1   12345   myvalue1 
2   12345   myvalue2 
3   12345   myvalue3 
4   123456  myvalue4 
+---------------------------------------+ 

,然後檢索帳戶12345的所有數據望着博託文檔,我總是需要有可用的HASH_KEY。我知道如何查詢這個標準的SQL/MongoDB,但我找不到boto的解決方案。我認爲這是可能的?謝謝!

編輯:這似乎是工作

+---------------------------------------+ 
hash_key range_key mykey 
----------------------------------------- 
12345  12568  myvalue1 
12345  53890  myvalue2 
12345  12322  myvalue3 
123456  23432  myvalue4 
+---------------------------------------+ 

通過

> res = table.query(hash_key='12345') 
> for item in res: 
> print i 

其次因爲我想抓住所有賬戶#12345項,無論range_key的,我需要查詢而不是get_item

+0

你有沒有遇到「UnknownFilterTypeError」查詢這樣的時候? –

回答

5

我將使用account_id作爲hash_key以及一些range_key來區分它們。

在DynamoDB中,主鍵由可選的(hash_key,range_keyrange_key組成。這個元組需要是唯一的。請注意,您需要整個元組才能使用get_item訪問給定的元素。

擁有'auto_increment'hash_key是SQL世界的一個壞習慣。

如果你想要更多的瞭解關於這個問題,我寫了一些背景做模型數據的dynamodb映射器文檔中:http://dynamodb-mapper.readthedocs.org/en/latest/api/model.html#auto-increment-when-to-use

+0

這就是我最初想要的,但是hash_key必須是唯一的! –

+0

是的,使用''range_key''來區分它們。如果你對模型有更多的背景知識,我可以嘗試提出一個建議。 – yadutaf

+0

我看到了 - 剛剛測試過,實際上,如果添加range_key,那麼dynamoDB將允許相同的hash_key。我想我給range_key的價值是不相關的(只要它是唯一的),因爲我只用它來區分條目?數據實際上是定期插入的GPS點。謝謝! –