joe1531
joe1531

Reputation: 514

CouchDB View : Add document as a new field to a document

Let's suppose I have these two documents :

{
 "type": "ip",
 "_id": "321",
 "key1": "10",
 "key2": "20",
 "ip_config": { 
       "ip": "127.0.0.1",
       "connexion": "WIFI" 
 }
}

{
 "type": "device",
 "_id": "1",
 "key1": "10",
 "key2": "20",
 "device": { 
       "port": "8808",
       "bits": 46 
 }
}

I want to generate a view in CouuchDB that gives me the following output :

{

 "key1": "10",
 "key2": "20",
 "ip_config": { 
       "port": "8808",
       "bits": 46 
 },
  "device": { 
       "port": "8808",
       "bits": 46 
 }
}

What is the map function that can help me get this output ?

Upvotes: 0

Views: 54

Answers (1)

Daniel Mermelstein
Daniel Mermelstein

Reputation: 1385

As @RamblinRose points out, you cannot "join" documents with a view. The only thing you can do is emit the keys that are common between the docs (in this case it looks like key1 and key2 identify this relationship).

So if you had a database called devices and created a design document called test with a view called device-view with a map function:

function (doc) {
  emit([doc.key1, doc.key2], null);
}

Then you would be able to obtain all the documents related to the combination of key1 and key2 with:

https://host/devices/_design/test/_view/device-view?include_docs=true&key=[%2210%22,%2220%22]

This would give you:

{"total_rows":2,"offset":0,"rows":[
{"id":"1","key":["10","20"],"value":null,"doc":{"_id":"1","_rev":"1-630408a91350426758c0932ea109f4d5","type":"device","key1":"10","key2":"20","device":{"port":"8808","bits":46}}},
{"id":"321","key":["10","20"],"value":null,"doc":{"_id":"321","_rev":"1-09d9a676c37f17c04a2475492995fade","type":"ip","key1":"10","key2":"20","ip_config":{"ip":"127.0.0.1","connexion":"WIFI"}}}
]}

This doesn't do the join, so you would have to process them to obtain a single document.

Upvotes: 2

Related Questions