2014-06-05 1 views
4

Est-il possible de lier plusieurs documents dans une vue.CouchDB lier plusieurs documents

Par exemple:

{ 
    "_id" : "0b86008d8490abf0b7e4f15f0c6a463b", 
    "name" : "copenhagen"} 
{ 
    "_id" : "8986008d8490abf0b7e4f15f0c6a333b", 
    "player" : "Mark" 
} 
{ 
    "_id" : "4b86008d8490abf0b7e4f15f0c6a463c", 
    "location" : { "uuid" : "0b86008d8490abf0b7e4f15f0c6a463b"}, 
    "player" : { "uuid" : "8986008d8490abf0b7e4f15f0c6a333b"}, 
    "session" : "9876" 
} 

Je veux une vue d'inclure le document de l'emplacement ainsi que le document de joueur.

Vue:

"fetchByLocationAndPlayer": { 
     "map": "function(doc) { if (doc.session) { emit(doc.session, { _id : **doc.location.uuid** });  } }" 
    } 

Dans la requête que j'utilise includedocs = true.

Comment puis-je émettre plusieurs documents correspondant à plusieurs clés dans un même document?

Répondre

5

Oui, c'est possible. Il suffit d'utiliser deux au lieu d'un émette

emit(doc.session, {_id:doc.location.uuid}); 
emit(doc.session,{_id:doc.player.uuid}); 

Couch db wiki listes encore une autre façon de le faire par itérer sur le tableau et l'émission liés docs un par un.

+0

Merci! Ça marche. Y at-il un moyen de limiter le json émis par le document lié? Il émet l'intégralité du document lié en tant qu'attribut doc. – Bhoomi

+0

@Boomi malheureusement pas. Vous ne pouvez pas sélectionner les champs qui seront émis par le document lié. En y pensant, ce serait une bonne chose à avoir. –

+1

Vous pouvez utiliser une fonction de liste pour lisser la sortie totale de la vue: http://docs.couchdb.org/en/latest/couchapp/ddocs.html?highlight=list%20function#list-functions –

Questions connexes