Multiple key search in CouchDB

couchdb

Given the following object structure:

{
   key1: "...",
   key2: "...",
   data: "..."
}

Is there any way to get this object from a CouchDB by quering both key1 and key2 without setting up two different views (one for each key) like:

select * from ... where key1=123 or key2=123

Kind regards,
Artjom

edit:

Here is a better description of the problem:
The object described above is a serialized game state. A game has exactly one creator user (key1) and his opponent (key2). For a given user I would like to get all games where he is involved (both as creator and opponent).

Best Answer

Emit both keys (or only one if equal):

function(doc) {
  if (doc.hasOwnProperty('key1')) {
    emit(doc.key1, 1);
  }
  if (doc.hasOwnProperty('key2') && doc.key1 !== doc.key2) {
    emit(doc.key2, 1);
  }
}

Query with (properly url-encoded):

?include_docs=true&key=123

or with multiple values:

?include_docs=true&keys=[123,567,...]

UPDATE: updated to query multiple values with a single query.

Related Topic