【问题标题】:Must pouchdb _id property values be globally unique?pouchdb _id 属性值必须是全局唯一的吗?
【发布时间】:2018-07-03 23:30:00
【问题描述】:

PouchDB Manual 建议使用Date().toJSON() 为每个文档生成一个新的 id。 However this an result in _id values that are identical.。 PouchDB 是否有内置机制来处理这个问题,还是我们应该使用 eventid 之类的东西?

具体而言,Date().toJson() 可以在同一时间产生 id 值,如下所示:

2018-01-26T21:12:15.574Z
2018-01-26T21:12:15.574Z
2018-01-26T21:12:15.575Z

如果一个文档已经有一个_id2018-01-26T21:12:15.574Z 并且再次尝试创建一个具有相同_id2018-01-26T21:12:15.574Z 的新文档,pouchdb 将抛出异常或以某种方式更改_id 属性这样它就变成了一个唯一的ID?例如2018-01-26T21:12:15.574Z_1

【问题讨论】:

  • 路人注意,我认为该建议的上下文 — 与批量 API 如何按 _idallDocs() 等)排序有关。

标签: javascript pouchdb event-id


【解决方案1】:

Pouchdb/Couchdb 会自动为新文档生成 ID,如果这是您所要求的。我们通常喜欢将文档的独特属性(如名称或位置)与 date.toJSON 结合起来,以使 id 具有自我描述性。你看一下_id,你就知道文档是关于什么的

【讨论】:

  • 现在我更加困惑了:)。那么如果有人使用 Date().toJson() 创建 _id 值,pouchdb 将 _id 值设置为什么?
  • 如果你设置了 _id couchdb 不会改变它。它只为没有 _id 道具的文档设置 _ids。如果您在设置 _ids 时遇到问题,并且没有商业原因您应该自己做,请离开并让 couchdb 为您处理
  • 我明白了 - 我稍微更新了问题以使其更清楚 - 让我知道是否可以进一步澄清 - 谢谢。
  • 那么当再次使用相同的 id 来创建新文档时,pouchdb 会抛出异常还是会改变 id?
  • 如果你使用现有的_id也不例外,那是更新的。它将检查并尝试更新 _rev,如果它在新文档中丢失或不是最新的,那么它将为无效 ref 抛出错误,但不会为 id 抛出错误,因为它会将其视为更新而不是新插入跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多