【问题标题】:How to update database entries instead of creating new entries如何更新数据库条目而不是创建新条目
【发布时间】:2016-12-07 09:19:22
【问题描述】:

我目前正在开发一个网络应用程序,我们使用可穿戴设备来监控一些重要参数。出于集成测试的目的,我正在使用 fitbit。 该应用程序是用 angular/javascript 编写的,数据库来自 cloudant。 我的问题是:您如何保持数据库条目的一般更新?我想每两小时从可穿戴设备请求数据并更新当天已有的条目,而不是创建新条目以防止重复。

到目前为止,我想到了两件事:

  1. 将今天的数据存储在一个变量中,尤其是数据库条目的 ID,每隔几个小时更新一次,并在 0:00 清除该变量。
  2. 在每次更新之前获取所有条目并检查是否有今天日期的条目。如果是,则获取所述条目的 ID 并更新它,否则创建一个新的

我对这两种解决方案都不满意。

提前致谢

【问题讨论】:

  • 我认为对于那种数据库来说,没有什么比“替换成”更好的了,也许是选项 1 或类似 redis 和一个每天执行一次选项 2 的 cron。
  • 我更喜欢第一种解决方案,但方式有点不同。对于每个条目,您必须接收回调并存储您上次插入的时间。在插入新数据时,您应该使用可变日期检查日期。关于这个比较,你可以决定做什么。

标签: javascript angularjs cloudant fitbit


【解决方案1】:

可以更新 Cloudant/CouchDB 中的现有文档,但您可能会遇到冲突。对于使用 Cloudant 的许多“IoT”类型场景来说,为每个样本创建一个新文档实际上是一种很好的方法。然后,您可以使用视图来具体化数据。您的文档可能如下所示:

{
   "timestamp": "2016-12-01T13:25:02.000Z",
   "type": "pressure",
   "value": 110.0
}

然后使用一个设计文档来发出数据,沿着

function(doc) {
    if (doc && doc.timestamp && doc.value && doc.type) {
        var ts = Date.parse(doc.timestamp);
        emit([doc.type, ts], doc.value);
    }
}

更多信息在这里:https://cloudant.com/blog/introduction-to-document-conflicts-part-three/

【讨论】:

  • 您的示例适用于血压或血氧饱和度等数据,在这些数据中您在设定的时间具有“静态”值。我遇到的问题是“递增”数据。例如每天的步数或每天燃烧的卡路里。假设我每天两次请求可穿戴数据,然后我将获得一个 3000 步的数据库条目和另一个 6000 步的数据库条目。
  • 您在视图中按时间顺序排列它们 - 如果您只对总数感兴趣,请选择最后一个。每个条目将代表采集样本时的总数。
  • 我同意@xpqz。数据存储很便宜。保留增量数据还使您能够随着时间的推移制作图表。
  • 我试试看。感谢您的帮助。
猜你喜欢
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2022-11-30
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 2021-08-30
相关资源
最近更新 更多