【问题标题】:Updating doc in CouchDB在 CouchDB 中更新文档
【发布时间】:2012-08-06 12:13:25
【问题描述】:

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

【问题讨论】:

    标签: jquery couchdb couchapp


    【解决方案1】:

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

    发布文件:{ _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);
      }
    }
    

    使用按日期排序的 cmets 检索帖子:

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

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

    同样的方法在here有详细描述。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 所以关于如何做的任何建议。我正在创建一个讨论板并将我的 cmets 以数组的形式保存在 cmets 字段中。那么我该如何实现这一点,以便当用户输入评论时它会得到更新而不影响之前的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      相关资源
      最近更新 更多