0

服务器 A 生成 JSON,通过 URL 公开它。

我的服务器 B 通过 PHP 查询此 URL,获取 JSON。

我想通过 PHP 将它粘贴在 CouchDB 中,该 CouchDB 也在 B 上运行。

问题是 A 的工作方式是它给你最后的,比如 200 个条目。如果我在星期一查询它,得到 200 个条目,然后在星期二查询它并得到 200 个以上,可能只有 50 个是“新的”,所以我不想坚持其他 150 个(相同)在数据库中。使用 PHP 和 CouchDB/JSON 的最佳方法是什么?

JSON 条目 [URL 公开的] 有一个 systemID 字段,每个元素都会增加。因此,如果我查询 URL 并收到 200 个条目,则数组中的最后一个元素应该具有最高的 systemID(不要与 CouchDB _id 混淆)。在将 JSON 粘贴到 CouchDB 之前,我显然也可以将字段(微时间?)添加到 JSON,但我仍然需要知道在数据库中查询什么以确保不存储重复项。

我想我需要根据这些 systemID 创建一个视图,按降序排序,然后查看我传入的 JSON 中哪个 systemID 大于视图的最后一个元素,但我不完全确定如何执行此操作。

任何帮助表示赞赏!

编辑:

所以,假设此时 CouchDB 有这个:

[
   {
    "AuthorName": "Thomson",
    "CreatedOn": "2013-07-23T22:21:51.822+00:00",
     "SystemID: "101"
  },
  {
    "AuthorName": "Johnson",
    "CreatedOn": "2013-07-23T22:22:51.822+00:00",
     "SystemID: "102"
  }
]

如何在 CouchDB 上运行查询以获取“102”?一旦我有了它,我就知道如何处理剩下的了。谢谢!

4

1 回答 1

0

所以,我整理了这个。这是如何做到的:

首先,我创建了一个视图,如下所示:

function(doc) {
  if (doc.BurnedID) {
     emit(doc.BurnedID);

  }
}

然后,我的 PHP 脚本查询如下 URL:

http://myserver.com/mydb/_design/SystemID/_view/Get%20SystemID?descending=true&limit=1

它返回一个 JSON 文档,最终包含 CouchDB 中当前最高 SystemID 的键。

然后我可以使用它来检查我传入的 JSON,并且只向数据库添加新条目。

请注意,如果 [incoming] JSON 还没有 SystemID,这也可以工作。我会使用 microtime(true) PHP 函数来生成时间戳(实际上,只是一个越来越大的浮点数),然后在将其放入数据库之前将其添加到 JSON 中。然后我可以以同样的方式使用它。

希望这对某人有帮助!

于 2013-07-24T22:22:08.773 回答