2016-12-12 165 views
0

我正在將一個Node/Express應用程序的後端從MongoDB重構到Redis。我的數據目前由幾十個(〜70)文檔組成,每個文檔由NAME,縮寫ABBR,GeoJSON位置和整數參數數組組成。每個文檔的PARAMETER每隔幾分鐘更新一次,但其餘屬性保持不變。 PARAMETER屬性的長度可能會有所不同(也可能爲空)。我想對數據執行很多查詢以檢查給定點的最近位置,並顯示名稱,縮寫和參數。Redis中的複雜數據結構

一個例子文件:

{ 
    _id: ObjectId("1"), 
    name: 'A place', 
    abbr: 'PLC', 
    location: { type: "Point", coordinates: [ -130.922, 33.289 ]}, 
    parameters: [3 4 28], 
} 

我熟悉的Redis的GEOADD命令,但我不明白如何使用它來創建更復雜的數據結構給握住我的數據,如果我使用GEOADD命令來指定一個位置,然後嘗試使用HMSET爲名稱和縮寫添加字段,我會得到一個WRONGTYPE錯誤。

我很欣賞的錯誤,因爲我看重引用透明和我喜歡的類型時,都認真對待。但我也認爲我可能從根本上誤解了Redis如何存儲數據。當我最初開始學習Redis的概念後重構,我設想能夠存儲我的數據的形式類似

1 name 'A Place' abbr 'PLC' location -130.922 33.289 parameters 3 4 28 

或者,如果沒有那麼,一種能夠方便地查詢的位置貼近我的組沿與其他屬性。

回答

2

Redis核心數據結構不能嵌套。在你的例子中,你應該爲每個級別使用不同的密鑰(和數據結構),例如,屬性的哈希值,位置的Geoset和參數的哈希值。

一旦你有了到位,您的查詢應該包括三個讀取組成最終的答案。

+0

實用的方法是將存儲位置爲「-130.922,33.289」哈希值的字符串,而ID添加到與GEOADD集地理,所以它會作爲一個指標。 –