Node.js Redis中的复杂数据结构
我正在将Node/Express应用程序的后端从MongoDB重构到Redis 我的数据目前由几十个(~70)文档组成,每个文档由一个名称、缩写ABBR、一个GeoJSON位置和一个整数参数数组组成。每个文档的参数每隔几分钟更新一次,但其余属性保持不变。参数属性的长度可能不同(也可以为空)。我想对数据执行许多查询,以检查距离给定点最近的位置,并显示名称、缩写和参数 示例文档:Node.js Redis中的复杂数据结构,node.js,mongodb,express,redis,bson,Node.js,Mongodb,Express,Redis,Bson,我正在将Node/Express应用程序的后端从MongoDB重构到Redis 我的数据目前由几十个(~70)文档组成,每个文档由一个名称、缩写ABBR、一个GeoJSON位置和一个整数参数数组组成。每个文档的参数每隔几分钟更新一次,但其余属性保持不变。参数属性的长度可能不同(也可以为空)。我想对数据执行许多查询,以检查距离给定点最近的位置,并显示名称、缩写和参数 示例文档: { _id: ObjectId("1"), name: 'A place', abbr: 'PLC',
{
_id: ObjectId("1"),
name: 'A place',
abbr: 'PLC',
location: { type: "Point", coordinates: [ -130.922, 33.289 ]},
parameters: [3 4 28],
}
我熟悉Redis中的GEOADD命令,但我不知道如何使用它创建更复杂的数据结构来保存我的数据,因为如果我使用GEOADD命令指定位置,然后尝试使用HMSET添加名称和缩写字段,我会得到错误的类型错误
我欣赏这个错误,因为我重视引用透明性,并且我喜欢认真对待类型。但我也认为我可能从根本上误解了Redis存储数据的方式。当我最初在概念上了解Redis后开始重构时,我设想能够将数据存储在类似
1 name 'A Place' abbr 'PLC' location -130.922 33.289 parameters 3 4 28
或者,如果不是那样的话,可以很容易地查询集合中位置的接近程度以及其他属性 不能嵌套Redis核心数据结构。在您的示例中,您应该为每个级别使用不同的键(和数据结构),例如,属性的哈希、位置的地理集以及参数的另一个哈希
一旦你准备好了,你的查询应该由三次读取组成最终答案。Redis核心数据结构不能嵌套。在您的示例中,您应该为每个级别使用不同的键(和数据结构),例如,属性的哈希、位置的地理集以及参数的另一个哈希
一旦你找到了答案,你的查询应该由三次读取组成最终答案。一种实用的方法是在散列键中将位置存储为“-130.922,33.289”字符串,并使用GEOADD将id添加到一个地理集合中,因此它将作为索引。一种实用的方法是将位置存储为“-130.922,33.289”字符串在散列键中输入“-130.922,33.289”,然后使用GEOADD将id添加到地理集合中,这样它将用作索引。