2

CouchDBでドキュメントを更新する方法を知っていますが、ドキュメントを更新すると、更新用に指定しなかったフィールドが削除されます。同じものを制限するにはどうすればよいですか。たとえば、私のCouchDBドキュメントは、Name、Age、Emailのフィールドで構成されており、このドキュメントのemailフィールドのみを更新したいと思います。したがって、電子メールフィールド、その値、ドキュメントID、およびそれに対応するリビジョンを渡すだけです。しかし、そのような更新を行うと、私のドキュメントは電子メールのみで構成されます。これを制限するにはどうすればよいですか。つまり、残りのフィールドとその値をそのままにして、電子メールIDのみが更新されます。私はjquery.couch.jsを使用しています

4

2 に答える 2

3

おそらく、あなたはそれをすべて間違っています... CouchDBで問題をCouchDB以外の方法で解決しようとしています。すべてのコメントを 1 つのドキュメントに保存するのはなぜですか? 投稿で 1 つのリクエストでそれらを取得する場合は、マップを使用して、次のように別のドキュメントから投稿とコメントを集約できます。

投稿文書:{ _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 ツリーに保存されるため、効率的でもあります。

同じアプローチについては、こちらで詳しく説明しています。

于 2012-08-07T12:13:32.513 に答える
2

そのため、メール フィールド、その値、ドキュメント ID、および対応するリビジョンを渡すだけです。

更新する値だけでなく、更新された値でドキュメント全体を保存する必要があります。ドキュメント自体を 1 つの大きな複合値と考えてください。全体を変更せずに一部を変更することはできません。

于 2012-08-06T12:16:44.687 に答える