Hi,  
You're better off emitting all the docs regardless of type and then using 
start_key/end_key to get the docs you're interested in:

function(doc){
  emit(doc._id, null);
}

then query the view with ?startkey="T1_"&endkey="T2_"

If your also interested in the number of docs per T1, T2 etc… You could do:

function(doc){
  emit(doc._id.substr(0,3), 1);
}


and use a _sum or _count reduce function to count the docs.
HTH
Simon


On Friday, 8 June 2012 at 08:18, Paulo Carvalho wrote:

> Hello,
>  
> Most of the functionnalities of the application using this database are 
> listing functionnalities. This is the main reason why in my couchDB structure 
> I have put T2's information inside T1's documents.
>  
> So, it is necessary for me to have such structure to improve listing 
> functions performance.
>  
> This is why I am looking (if existant) a better way that the one I am using 
> to identify all T1 documents, etc.
>  
> e.g. function to get all the T1 documents:
> function(doc) { if(doc._id.indexOf('T1_') == 0) { emit(null, doc); } }Thank 
> you
>  
> Regards
>  
> On Thu, Jun 7, 2012 at 11:00 PM, Simon Metson <[email protected] 
> (mailto:[email protected])> wrote:
> > Hey Paulo,  
> > I think you need to think about what data you have and how you want to 
> > interrogate it, rather than how you currently structure your database 
> > schema; it sounds like you have a very normalised schema and you need to 
> > denormalise that to make the most of CouchDB.
> >  
> > By moving to a NoSQL DB you need to review your use cases and requirements 
> > and change how you think about the data. It might not be that the tradeoffs 
> > you need to make don't fit your data, or that you have no choice but to 
> > change your data model to adopt a tool that has the features you need.  
> > Cheers
> > Simon
> >  
> > On Thursday, 7 June 2012 at 15:02, Paulo Carvalho wrote:
> >  
> > > Hello,
> > >  
> > > Thanks for your answer.
> > >  
> > > However, I don't know if the proposed solution works for my purpose 
> > > because I have several tables more (so, much more documents).
> > >  
> > > Before, in my relational database, I had several tables, to simplify, I 
> > > will call them T1, T2, T3, T4, T5, ..., TN
> > >  
> > > Now, in the couchDB database, I have a structure like that:
> > >  
> > > {
> > >   _id = T1_1
> > >   T2 {
> > >      ...
> > >   }
> > > {
> > >   _id = T1_2
> > >  T2 {
> > >      ...
> > >   }
> > > }
> > >  
> > > {
> > >   _id = T1_3
> > >  T2 {
> > >      ...
> > >   }
> > >  T3 {
> > >      ...
> > >   }
> > > }
> > >  
> > > {
> > >   _id = T2_1
> > >  ...
> > > }
> > >  
> > >  
> > > {
> > >   _id = T2_2
> > >  ...
> > > }
> > >  
> > >  
> > > {
> > >   _id = T2_3
> > >  ...
> > > }
> > >  
> > > {
> > >   _id = T2_3
> > >   T5 {
> > >     ...
> > >   }
> > >   ...
> > > }
> > >  
> > > }
> > >  
> > >  
> > > As you can see, in the "root" level of the DB, I can have documents which 
> > > are "instances" of different tables.
> > >  
> > > What I would like to do, is to find the most performant way to list all 
> > > the documents which come from T1 table, all the documents which come from 
> > > T2 table, etc.
> > >  
> > > Do you understood my doubt?
> > >  
> > > Thank you
> > >  
> > > Best regards
> > >  
> > > Paulo
> > >  
> > >  
> > > On Thu, Jun 7, 2012 at 3:38 PM, Simon Metson <[email protected] 
> > > (mailto:[email protected])> wrote:
> > > > Hi,  
> > > > Moving this to user@
> > > >  
> > > > If you just need the authors names, and books are unique, you could 
> > > > just have your book documents be something like:
> > > >  
> > > > {  
> > > >   _id: book_title,
> > > >   author: {
> > > >     name: author_name,
> > > >     age: author_age
> > > >   },
> > > >   year: book_year
> > > > }
> > > >  
> > > > then pull out all the authors via a view.   
> > > >  
> > > > You shouldn't include the doc in the view value, that's very space 
> > > > inefficient. I think you'll want a view like:
> > > >  
> > > > // view for books
> > > > function(doc) {
> > > >   emit(doc._id, 1);
> > > > }
> > > >  
> > > >  
> > > > //view for authors
> > > > function(doc) {
> > > >   emit(doc.author.name (http://doc.author.name), 1);
> > > > }
> > > >  
> > > >  
> > > > (you could use a _count reduce to return the number of books/authors, 
> > > > if thats useful)
> > > >  
> > > > The above depends a lot on what you want to use the data for, and what 
> > > > other information you need to include in your docs, though. You might 
> > > > need to have a list of authors, for example, or include their biography 
> > > > in which case the above isn't great.  
> > > > Cheers
> > > > Simon
> > > >  
> > > > On Thursday, 7 June 2012 at 13:57, pjmorce wrote:
> > > > > Hello,
> > > > >  
> > > > > I am new to noSQL databases and more precisely to couchDB.
> > > > >  
> > > > > I have migrated my PostgreSQL database to couchDB.
> > > > >  
> > > > > Before, in my relational database I had 2 tables: Authors and Books
> > > > >  
> > > > > Now, for each row of these tables, on my couchDB database I have a 
> > > > > document:
> > > > >  
> > > > > { _id = "author_1"  
> > > > >  
> > > > > {
> > > > > name = "a"
> > > > > age = "b"
> > > > > }
> > > > > }
> > > > > { _id = "author_2"
> > > > >  
> > > > > {
> > > > > name = "abc"
> > > > > age = "bcd"
> > > > > }
> > > > > }
> > > > > { _id = "book_1"
> > > > >  
> > > > > {
> > > > > title = "the x files"
> > > > > year = "1994"
> > > > > }
> > > > > }
> > > > > { _id = "book_2"
> > > > >  
> > > > > {
> > > > > title = "the jungle book"
> > > > > year = "1964"
> > > > > }
> > > > > }
> > > > > ...
> > > > >  
> > > > > For getting all the authors I created the following view:
> > > > >  
> > > > > function(doc) {
> > > > > if(doc._id.indexOf('author_') == 0) {
> > > > > emit(null, doc);
> > > > > }
> > > > > }
> > > > >  
> > > > > and for getting all the books I created the following view:
> > > > >  
> > > > > function(doc) {
> > > > > if(doc._id.indexOf('book_') == 0) {
> > > > > emit(null, doc);
> > > > > }
> > > > > }
> > > > >  
> > > > >  
> > > > > Is there any more efficient way to do this? I think this solution is 
> > > > > not
> > > > > performant when large amount of documents will be in the database...
> > > > >  
> > > > > Thank you
> > > > >  
> > > > > Regards
> > > > >  
> > > > > --
> > > > > View this message in context: 
> > > > > http://couchdb-development.1959287.n2.nabble.com/Efficient-way-to-identify-documents-tp7580274.html
> > > > > Sent from the CouchDB Development mailing list archive at Nabble.com 
> > > > > (http://Nabble.com).
> > > > >  
> > > > >  
> > > > >  
> > > >  
> > > >  
> > >  
> >  
>  

Reply via email to