node.js - 数据映射的 Mongoose/Mongo 结构

标签 node.js mongodb mongoose

enter image description here

您好,我有一些数据,我需要一些帮助来找到用于显示它的正确数据结构。我的目标是拥有一张如上图所示的 map 。不同的物理站点会有经纬度信息,但圆半径将由每个站点的不同统计数据确定。用户将能够选择他们想要查看的数据集。大约有26组数据。只有一组位置。

我的数据如下所示:

地点(约5000个)

var locSchema = mongoose.Schema({
 name : 'string',
 siteID : 'number',
 address1 : 'string',
 address2 : 'string',
 loc: {type: [Number], index: '2dsphere'}
});

具体数据(约12000条)

var dataSchema = mongoose.Schema({
  providerNumber : "number",  //The "siteID" of the site.
  date : "date",
  volume : "number",
  cost : "number",
  label : "string",  //There are 26 different stats each with a different label
  siteID : "oid"  //The oid of the site
});

我的第一个猜测是它们应该是一个集合,每条数据都存储为数组:

name : 'string',
siteID : 'number',
address1 : 'string',
address2 : 'string',
loc: {type: [Number], index: '2dsphere'},
data : [
   {
     providerNumber : "number",  //The "siteID" of the site.
     date : "date",
     volume : "number",
     cost : "number",
     label : "string",  //There are 26 different stats each with a different label
     siteID : "oid"  //The oid of the site
   },
   ...
]

但我不确定如何在 Mongoose 中创建这种数据结构,尤其是对象数组。此外,可能会有多组更新数据需要可视化。

所以我的问题是: 1. 该数据的最佳结构是什么? 2. 在 Mongoose 中创建它的语法是什么? 3. 关于使其可扩展有什么建议吗?

最佳答案

我倾向于使 mongo 中的数据尽可能保持平坦和非规范化。我在更新和维护子文档(尤其是数组)时遇到了问题。我还喜欢根据最常用的方式对数据进行建模。我的偏好是这样的:

var schema = mongoose.Schema({
  name: String,
  siteID: Number,
  address1: String,
  address2: String
  loc: { type: [Number], index: '2dsphere' }
  date: Date,
  volume: Number,
  cost:  Number,
  label: String
});

这意味着您将有一些重复的数据(名称、地址1等),但我认为如果您对 dataSchema 部分的操作多于对 locSchema 的操作,那么这是值得的。现在添加/删除/更新数据变得更加简单。您可以使用mongo aggregation按照您的意愿对数据进行分组和结构化。

关于node.js - 数据映射的 Mongoose/Mongo 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728189/

相关文章:

javascript - 为什么 JavaScript `Intl.Collator.prototype.compare()` 方法会产生与特殊字符的传统 UTF-16 比较不同的结果?

mongodb - 无法在提供的主机和端口上连接到 MongoDB

javascript - npm chart.js 最小化后很大

javascript - 如何使用 pdflatex 子进程在 Node.js 中获取 PDF 作为流?

mongodb - MongoDB 中的默认 block 大小和拆分行为

mongodb - Mongo Shell 显示已添加文档,但 Scalatest 中断言失败

javascript - 从 CSV 创建独特的 Mongoose 对象

javascript - 在我进行第二次提交后,每当我尝试获取登录页面或注册页面时,都会收到 404 错误

node.js - 如何为 koajs 服务器做优雅的停止?

node.js - Node.js 事件循环的概念与 CICS 伪对话式编程相同吗?