CouchDB中的多键搜索

art*_*nig 6 couchdb

给定以下对象结构:

{
   key1: "...",
   key2: "...",
   data: "..."
}
Run Code Online (Sandbox Code Playgroud)

有没有办法通过查询key1和key2来从CouchDB获取此对象而不设置两个不同的视图(每个键一个),如:

select * from ... where key1=123 or key2=123
Run Code Online (Sandbox Code Playgroud)

亲切的问候,Artjom

编辑:

以下是对问题的更好描述:上述对象是序列化游戏状态.游戏中只有一个创建者用户(key1)和他的对手(key2).对于给定的用户,我希望得到他所涉及的所有游戏(作为创造者和对手).

Mar*_*cio 4

发出两个键(如果相等则仅发出一个):

function(doc) {
  if (doc.hasOwnProperty('key1')) {
    emit(doc.key1, 1);
  }
  if (doc.hasOwnProperty('key2') && doc.key1 !== doc.key2) {
    emit(doc.key2, 1);
  }
}
Run Code Online (Sandbox Code Playgroud)

查询(正确的 url 编码):

?include_docs=true&key=123
Run Code Online (Sandbox Code Playgroud)

或具有多个值:

?include_docs=true&keys=[123,567,...]
Run Code Online (Sandbox Code Playgroud)

更新:更新为使用单个查询查询多个值。