I've searched the wiki and googled for "subselect" and "subquery", and not 
found anything relevelant.

I'm evaluating whether CouchDB can handle an app which currently stores a tree 
structure in a relational database using the "materialized path" represenation. 
 For example, the item with path "QG" is a child of the item with path "Q" and 
a parent of the item with path "QGC".   

The trickiest query is, in English, "find all items with work less than zero 
and whether they have any children with work less than zero".  The SQL for this 
is
SELECT item.*, EXISTS (SELECT work FROM item AS d WHERE d.path > item.path AND 
d.path <= item.path || '\ufffd' AND d.work < 0) AS undonePrereq, FROM item 
WHERE work < 0

Can this be done in CouchDB, using a limited, small number of queries?

My closest sally is the map function
function(doc) {
  if (doc.work < 0) {
    var key = [];
    var i;
    for (i=0; i<doc._id.length; ++i)
      key.push(doc._id.charCodeAt(i));
    emit(key, doc.work);
  }
}

and the reduce function 
function(keys, values, rereduce) {
  var shortestKeyLength = Infinity;
  for (var i=0; i<keys.length; ++i) {
    if (keys[i][0].length < shortestKeyLength)
        shortestKeyLength = keys[i][0].length;
  }

  return [keys.length, shortestKeyLength, 
keys[0][0].slice(0,shortestKeyLength), values.length];
}

A query such as
curl -X GET 
'http://127.0.0.1:5984/tracker1/_design/trackerA/_view/undoneArrayNum?startkey=\[45,65,65\]&endkey=\[45,65,9999\]&group_level=2'
will return the data necessary for items at the second level, but the desired 
items could be at any level.



Doug Reeder
[email protected]
http://reeder29.livejournal.com/
https://twitter.com/reeder29

https://twitter.com/hominidsoftware
http://outlinetracker.com








Reply via email to