Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Couchdb: relational database capabilities

Let's assume that I have a list of 239800 documents like the following:

{
    name: somename,
    data:{age:someage, income:somevalue, height:someheight, dumplings_consumed:somenumber}
}

I know that I can index the doc by doc.data.age, doc.data.income, height, dumplings_consumed and get list of the doc that after giving a range for each parameters but how can I get a result for query like following:

List of the docs where age is between 25 and 30, income is less than $10 and height is more than 7ft?

Is there a way to get multiple indexes working?

like image 773
Oo.oO Avatar asked Jul 04 '26 17:07

Oo.oO


1 Answers

Assuming all three of your example query parameters need to remain dynamic, you would not be able to do such a join with a single CouchDB query. The simplest strategy would be to emit an index that lets you narrow down the "biggest" aspect/dimension of your data, and then filter the rest out in your app's code or a _list function.

Now, for filtering on two aspects of numeric data, GeoCouch could potentially be used — it provides a generic 2-dimensional index, not just limited to latitude and longitude! So you would emit points that contain (say) "age" and "income" mapped to x and y. You'd then query a bbox with first two "between" parameters, and then you'd only have to filter out height on the app side.

like image 64
natevw Avatar answered Jul 06 '26 16:07

natevw



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!