首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CouchDB中向现有文档添加字段

在CouchDB中向现有文档添加字段
EN

Stack Overflow用户
提问于 2014-05-23 06:30:21
回答 1查看 5.9K关注 0票数 1

我有一个数据库,其中有一堆类似于这样的常规文档(例如来自wiki):

代码语言:javascript
复制
{
 "_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."
}

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-23 09:13:13

关于ID的

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

如果要设置自己的id,则必须将id值赋值给doc._id。如果您没有设置它,那么couchdb将分配一个uuid

如果要更新文档,则需要确保具有相同的id和有效的修订。如果你是从一个博客帖子工作,用户添加的位置,那么该帖子的网址可能是一个很好的id使用。在这种情况下,您可以立即访问文档。

,那么什么是修订版

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

,那么我如何更新文档

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

代码语言:javascript
复制
doc = db.get(id)
doc['Location'] = "On a couch"
db.save(doc)

我有一个存储天气预报数据的例子。我大约每2小时更新一次预报。另一个过程是寻找来自不同提供商的数据,查看当天tweet的特性。

这个看起来像这样。

代码语言:javascript
复制
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将变得无效,因此您必须有一个故障保存,例如。这可以做到:

代码语言:javascript
复制
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)

,那么我如何获得Ids呢?

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

您很可能会为此使用视图。视图有一个映射器和一个减速机。你要用第一个,忘了最后一个。带有映射器的视图执行以下操作:

它返回一种简单/转换的查看数据的方法。每个数据可以返回多个值,也可以跳过一些值。它给出您发出的数据一个键,如果您使用_include_docs函数,它将给您文档(连同_idrev一起)。

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

下一个简单的方法是拥有只返回属于文档类型的项的视图。我的数据库中有一个_type="article。如果您已经将文档存储在关系数据库中,则可以将其看作是标记文档属于某个表。

最后,您可以过滤具有位置的元素,这样就有了一个视图,您可以在其中迭代仍然需要位置的所有文档,并在单独的进程中标识这一点。关于编写视图的最佳文档可以找到这里

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23822418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档