gpt4 book ai didi

python - 将字段添加到 CouchDB 中的现有文档

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:05 26 4
gpt4 key购买 nike

我有一个数据库,其中包含一堆看起来像这样的常规文档(来自 wiki 的示例):

{
"_id":"some_doc_id",
"_rev":"D1C946B7",
"Subject":"I like Plankton",
"Author":"Rusty",
"PostedDate":"2006-08-15T17:30:12-04:00",
"Tags":["plankton", "baseball", "decisions"],
"Body":"I decided today that I don't like baseball. I like plankton."
}

我正在使用 couchdb-python 在 Python 中工作,我想知道是否可以向每个文档添加一个字段。例如,如果我想要一个“位置”字段或类似的东西。

谢谢!

最佳答案

关于 ID

couchdb 中的每个文档都有一个 id,无论您是否设置它。存储文档后,您可以通过 doc._id 字段访问它。

如果您想设置自己的 ID,您必须将 ID 值分配给 doc._id。如果您不设置它,那么 couchdb 将分配一个 uuid .

如果你想更新一个文档,那么你需要确保你有相同的 id 和一个有效的修订版。如果说您正在使用博客文章并且用户添加了位置,那么文章的 url 可能是一个很好的 id。在这种情况下,您将能够立即访问文档。

那么什么是修订

在上面的代码片段中,您有 doc._rev 元素。这是修订的标识符。如果你用一个已经存在的 id 保存文档,couchdb 要求你证明该文档仍然是有效的文档,并且你没有试图覆盖其他人的文档。

那么我该如何更新文档

如果您有文档的 ID,则可以使用 db.get(id) 函数访问每个文档。然后您可以像这样更新文档:

doc = db.get(id)
doc['Location'] = "On a couch"
db.save(doc)

我有一个存储天气预报数据的示例。我大约每 2 小时更新一次预测。一个单独的过程正在寻找我从不同提供商那里获得的数据,以查看当天推文的特征。

这看起来像这样。

doc = db.get(id)
doc_with_loc = GetLocationInformationFromOtherProvider(doc) # takes about 40 seconds.
doc_with_loc["_rev"] = doc["_rev"]
db.save(doc_with_loc) # This will fail if weather update has also updated the file.

如果你有并发进程,那么 _rev 将变得无效,所以你必须有一个故障保存,例如。这可以做:

doc = db.get(id)
doc_with_loc = GetLocationInformationFromAltProvider(doc)
update_outstanding = true
while update_outstanding:
doc = db.get(id) //reretrieve this to get
doc_with_loc["_rev"] = doc["_rev"]
update_outstanding = !db.save(doc_with_loc)

那么如何获取 ID?

上面建议的一个选项是您主动设置 id,这样您就可以检索它。 IE。如果用户设置了附加到 URL 的给定位置,请使用该 URL。但是您可能不知道要更新哪个文档 - 或者甚至没有找到所有没有位置的文档并分配一个的过程。

您很可能为此使用 View 。 View 有一个映射器和一个缩减器。您将使用第一个,忘记最后一个。带有映射器的 View 执行以下操作:

它返回一种查看数据的简单化/转换方式。您可以为每个数据返回多个值或跳过一些。它为您发出的数据提供一个 key ,如果您使用 _include_docs 函数,它将为您提供文档(与 _idrev 一起) .

最简单的 View 是默认 View db.view('_all_docs') 这将返回所有文档,您可能不想更新所有文档。例如,当您定义 View 时, View 也将存储为文档。

下一个简单的方法是让 View 只返回文档类型的项目。我倾向于在我的数据库中有一个 _type="article。如果您将文档存储在关系数据库中,可以将其视为标记文档属于某个表。

最后,您可以过滤具有位置的元素,以便您拥有一个 View ,您可以在其中迭代所有仍需要位置的文档,并在单独的进程中识别它。可以找到编写 View 的最佳文档 here .

关于python - 将字段添加到 CouchDB 中的现有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23822418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com