Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Redis中的复杂数据结构_Node.js_Mongodb_Express_Redis_Bson - Fatal编程技术网

Node.js Redis中的复杂数据结构

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',

我正在将Node/Express应用程序的后端从MongoDB重构到Redis

我的数据目前由几十个(~70)文档组成,每个文档由一个名称、缩写ABBR、一个GeoJSON位置和一个整数参数数组组成。每个文档的参数每隔几分钟更新一次,但其余属性保持不变。参数属性的长度可能不同(也可以为空)。我想对数据执行许多查询,以检查距离给定点最近的位置,并显示名称、缩写和参数

示例文档:

{ 
  _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添加到地理集合中,这样它将用作索引。