2

我知道如何更新 CouchDB 中的文档,但是当我更新文档时,我没有为更新指定的字段会被删除。我如何限制相同。例如,我的 CouchDB 文档包含以下字段:姓名、年龄、电子邮件,我只想更新此文档的电子邮件字段。所以我只需传入电子邮件字段、它的值、文档 ID 及其相应的 rev。但是当我进行这样的更新时,我的文档现在将只包含电子邮件。我如何限制这一点。即,只有电子邮件 ID 得到更新,保持其余字段和它的值不变。我正在使用 jquery.couch.js

4

2 回答 2

3

也许你做错了......你正试图以非 CouchDB 的方式解决 CouchDB 中的问题。为什么要将所有评论存储在一个文档中?如果您想通过帖子在一个请求中检索它们,那么您可以使用 map 来聚合来自不同文档的帖子和评论,如下所示:

发表文件:{ _id: "post1", type: "post", ... } 评论文件:

{ type: "comment",
  post: "post1", // id of the post being commenting
  ...
}

地图:

function (self) {
  if (!self.type) return;
  if (self.type == "post") {
    emit([self._id, 0], self);
  } else if (self.type == "comment" && self.post) {
    emit([self.post, 1, self.time], self);
  }
}

检索带有按日期排序的评论的帖子:

curl http://127.0.0.1:5984/yourdb/_design/yourapp/_view/yourview?startkey=[%22post1%22]&endkey=[%22post1%22,{}]

通过这种方式,您还可以仅检索部分评论并轻松实现分页。所有评论都应该存储在靠近帖子的 B-tree 中,因此它也应该是高效的。

此处详细描述了相同的方法。

于 2012-08-07T12:13:32.513 回答
2

所以我只需传入电子邮件字段、它的值、文档 ID 及其相应的 rev。

您需要使用更新的值保存整个文档,而不仅仅是要更新的值。将文档本身视为一个大的复合值;你不能改变它的一部分而不改变整个事情。

于 2012-08-06T12:16:44.687 回答