首页 > 解决方案 > 地理数据的 CouchDB 最佳文档模型

问题描述

开始构建一个显示城市中多个地点的 web 应用程序。但在此之前尝试在 CouchDB 中构建良好的数据库建模基础。

所以,每个城市都是一个文件,在城里有不同的地方电子邮件,是发送/添加地点的人。评论是为了在这个地方提供额外的信息。尝试分层工作。

下一步是在传单地图上显示所有地点并按“城市”过滤。

 - city
  - place 1
  - place 2
  - ...
  - place x

这是我的文档模型:

{
"_id": "52888cacec450d22e4baa0c1754cb777",
"_rev": "2-c916a9d3ce0a86a775dd232996c0f865",
"zip": "8660",
"city": "Adinkerke",
"province": "West-Vlaanderen",
"lng": 2.5896028375712,
"lat": 51.06926315,
"comments": "",
"locations": [
  {
   "places": "1",
   "lat": "51.074319",
   "lng": "2.599509",
   "street": "Kerkweg",
   "comments": "",
   "email": "c***@gmail.com",
   "published": "27/12/2019"
  },
  {
   "places": "1",
   "lat": "51.075027",
   "lng": " 2.602127",
   "street": "Dorpstraat",
   "comments": "Parking Dorpstraat/Kerkweg",
   "email": "c***@gmail.com",
   "published": "27/12/2019"
  }
 ]
}

一些建议,是否可以更好?

标签: jsoncouchdb

解决方案


相反,将您的模型翻转过来——让每个位置都是一个单独的文档,其中包含一个“城市”字段,然后使用以“城市”为关键字的地图来获取城市中的所有位置。这样,您可以降低更新冲突的风险,以及随着应用程序扩展而不断增长的文档。

function(doc) {
  if (doc && doc.city) {
      emit(doc.city, null);
  }
}

一般建议是:小型文档,不可变模型。请参阅https://blog.cloudant.com/2019/11/21/Best-and-Worst-Practices.html


推荐阅读