Hi again, So let me understand this clearly. There is no way to combine the fields from multiple (2-3+) documents into one row in the output for couchDB? I will try to do more reading and research about the reduce and list functions over the weekend. Again, thank you for all your help.
On Thu, Nov 11, 2010 at 3:07 PM, Chad George <[email protected]> wrote: > Reduce functions are suppose to have significantly smaller outputs than > inputs. > > If you can't combine the results on the client then I think list functions > are what you need to use. > On Nov 11, 2010 2:02 PM, "Duc Phan" <[email protected]> wrote: > > Hi, > > Thanks for your response. > > I tried the js you sent and I got an error: reduce_overflow_error > > > > regards, > > Duc > > > > On Thu, Nov 11, 2010 at 1:49 PM, Diogo Silva < > [email protected] > >wrote: > > > >> I guess if you just want to "merge" the docs of same key (serial) you > can > >> have a map like: > >> > >> function(doc){ > >> emit(doc.SERIAL,doc); > >> } > >> > >> and reduce it with: > >> > >> function(key, values) { > >> var obj = {}; > >> for(var i in values) { > >> for(var k in values[i]) { > >> obj[k] = values[i][k]; > >> } > >> } > >> return obj; > >> } > >> > >> > >> 2010/11/11 Duc Phan <[email protected]> > >> > >> > Hello Cliff, > >> > > >> > First, thank you for your response. > >> > I have seen that document ( > >> > http://www.cmlenz.net/archives/2007/10/couchdb-joins ) and almost > every > >> > single thing that returned from Google with the query of "Join+ View+ > >> Query > >> > +CouchDB". > >> > Please excuse my ignorant of these topics. > >> > I have tried the view collations, by using this code: > >> > function(doc){ > >> > if (doc.Type == "Inventory"){ > >> > emit ([doc.SERIAL,0],doc);} > >> > else if (doc.Type == "Machine"){ > >> > emit([doc.SERIAL,1],doc);} > >> > } > >> > > >> > > >> > And when I run the view I get two rows for each machine (one contains > >> info > >> > in Inventory Doc and the other contains info in Machine Doc). > >> > Is that my solution? There isn't a way to get the info from Inventory > and > >> > Machine on one row? > >> > > >> > And.. yes I did migrate the data from an Oracle DB. I can construct a > >> > document like : > >> > > >> > > >> > > {"ID":"someID","Name":"someName","Location":"someLocation","Serial":"someSerial","Model":"someModel","OS":"someOS","RAM":"someRAMsize","HD":"someHDsize"} > >> > > >> > but, I would like to know how to join them anyways because I will have > to > >> > do > >> > many more join queries because many of those fields are related to > other > >> > documents. > >> > I didn't think it was a good idea to put hundreds of fields into one > >> > document. > >> > > >> > Again, thank you for your suggestions. Any other suggestions or tips > >> would > >> > be greatly appreciated since I have spent two days trying to solve my > >> > problems. > >> > > >> > > >> > > >> > On Thu, Nov 11, 2010 at 12:17 PM, Cliff Williams <[email protected] > >> > >wrote: > >> > > >> > > Duc, > >> > > > >> > > have you seen this document > >> > > > >> > > http://www.cmlenz.net/archives/2007/10/couchdb-joins > >> > > > >> > > look for view collations > >> > > > >> > > Also > >> > > > >> > > What would be the harm in constructing a document with > >> > > > >> > > > >> > > > >> > > > >> > > >> > > {"ID":"someID","Name":"someName","Location":"someLocation","Serial":"someSerial","Model":"someModel","OS":"someOS","RAM":"someRAMsize","HD":"someHDsize"} > >> > > > >> > > > >> > > rather than the RDBMS format you describe (I assume that your data > is > >> > > coming from a RDBMS). > >> > > > >> > > I think that it would make your life easier. > >> > > > >> > > best regards > >> > > > >> > > cliff > >> > > > >> > > > >> > > > >> > > > >> > > On 11/11/10 16:35, Duc Phan wrote: > >> > > > >> > >> Hello all, > >> > >> I am fairly new to couchDB and the Map/Reduce framework. > >> > >> I am having problems creating a join view. > >> > >> > >> > >> For example: > >> > >> I have multiple documents in these two formats > >> > >> First > >> > >> ------------------------------ > >> > >> ------------- > >> > >> Type : Inventory > >> > >> ID: someID > >> > >> Name: someName > >> > >> Location: someLocation > >> > >> Serial: someSerial > >> > >> ------------------------------------------ > >> > >> > >> > >> > >> > >> Second > >> > >> ----------------------------------------- > >> > >> Type: Machine > >> > >> Serial: someSerial > >> > >> Model: someModel > >> > >> OS: someOS > >> > >> RAM: someRAMsize > >> > >> HD: someHDsize > >> > >> > >> > >> > >> > >> > >> > >> Here is what I am trying to do... > >> > >> in SQL> Select ID, Name, Location, Type, Model, OS, RAM, HD from > >> > >> Inventory, > >> > >> Machine where Inventory.Serial = Machine.Serial > >> > >> That would join the two tables where the Serials match up. > >> > >> > >> > >> How would I do that in couchDB where I have multiple documents with > >> > Type: > >> > >> Inventory and Type: Machine > >> > >> I would like the output to be something like: > >> > >> > >> > >> > >> > > >> > > {"ID":"someID","Name":"someName","Location":"someLocation","Serial":"someSerial","Model":"someModel","OS":"someOS","RAM":"someRAMsize","HD":"someHDsize"} > >> > >> for all the machines > >> > >> I have read couchDB the definitive guide and many blogs but I still > >> > >> haven't > >> > >> found a way to solve my problem. > >> > >> > >> > >> My attempt: > >> > >> Map: function(doc){ > >> > >> if (doc.Type == "Inventory"){ > >> > >> emit ([doc.SERIAL,0],doc);} > >> > >> else if (doc.Type == "Machine"){ > >> > >> emit([doc.SERIAL,1],doc);} > >> > >> } > >> > >> > >> > >> Reduce: ? What should I do here. > >> > >> > >> > >> Thank you in advance for any suggestions or help. > >> > >> > >> > >> > >> > > >> >
