1

CouchDB に保存したいグループとユーザーのドキュメントがあり、ユーザーは複数のグループに参加できます。1 つのグループに数千のユーザーを含めることができます。ここに私が思いついたドキュメントがあります:

Group: { "_id":"group1", "name":"abc", "type":"group" }
Group: { "_id":"group2", "name":"abc", "type":"group" }
User: { "_id":"user1", "login":"whatever", "groupIds": ["group1" , "group2"], "type":"user" }
User: { "_id":"user2", "login":"whatever", "groupIds": ["group2"], "type":"user" }

ユーザー ID でグループを取得したい。私ができる最善のことは、このビューを定義することです。

function(doc) {
  if (doc.type == "user")
  {
    emit(doc._id, doc.groupIds);
  }
}

ただし、この場合、1 つのリクエストでグループ ID を取得してから、別のリクエストで各グループを取得する必要があります。groups by user idCouchDB への 1 回のリクエストですべてのグループが返されるようにビューを作成する方法はありますか?

4

1 に答える 1

2

リンクされたドキュメントの構文を使用して、特定のユーザーのグループ ドキュメントのリストを取得できます。このビューを作成します。

function(doc) {
  if( doc.type === 'user' ) {
    var gids = doc.groupIds;
    for( var i=0, l=gids.length; i<l; i++) {
      emit( doc._id, { '_id': gids[i] } );
    }
  }
}

次に、パラメーターを使用してこれをクエリするとinclude_docs=true、Couch は{ "_id": "group1" }そのリンクされたドキュメントの特別な値を確認して取得します。doc返されたハッシュ行の要素にすべてのグループ ドキュメントが含まれることになります。

于 2012-07-16T22:20:11.483 に答える