我正在重构MongoDB到Redis的Node / Express应用程序的后端。
我的数据目前包含几十个(约70个)文档,每个文档由NAME,缩写ABBR,GeoJSON LOCATION和整数PARAMETER数组组成。每个文档的PARAMETER每隔几分钟更新一次,但其余属性仍然是固定的。 PARAMETER属性的长度可能会有所不同(也可能为空)。我想对数据执行许多查询以检查给定点的最近位置,并显示名称,缩写和参数。
示例文档:
{
_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
或者如果不是那样,可以轻松查询我的集合中的位置与其他属性的接近程度。
答案 0 :(得分:2)
Redis核心数据结构无法嵌套。在您的示例中,您应该为每个级别使用不同的密钥(和数据结构),例如属性的哈希,位置的Geoset和参数的另一个哈希。
一旦你有了这个,你的查询应该由三个读数组成,以构成最终的答案。