使用多个键映射功能

时间:2015-01-06 19:41:42

标签: couchdb pouchdb emit

我正在使用以下地图功能运行couchDB服务器:

function(doc) {
            if (doc.data.appVersion)  {
                emit([doc.data.appVersion, doc.data.date], doc);
            }
        }

我可以使用以下内容轻松查询appVersion或一系列appVersion:

  

开始键:[" 1.2.3",0]结束键:[" 2.0.0",10000000000000]

我还可以在两个日期之间查询appVersion:

  

开始键:[" 1.2.3",1420066800000]结束键:[" 1.2.3",1422572400000]

我无法做到的是获取所有文档,无论他们的appVersion如何,但在两个日期之间。这不起作用:

  

开始键:[" 0.0.0",1420066800000]结束键:[" 9.9.9",1422572400000]

该查询还将包含appVersion介于0.0.0和9.9.9之间的所有文档。日期完全被忽略。它就像:

  

"获取appVersion的所有文档介于0.0.0和9.9.9之间或日期介于1420066800000和1422572400000之间#34;。

但我想要的是:

  

"获取appVersion的所有文档介于0.0.0和9.9.9之间,日期介于1420066800000和1422572400000之间"

有没有办法让所有三个查询工作?我是否必须更改地图功能?怎么样?或者我是否必须为最后一种查询创建另一个地图函数。我想使用一个地图功能执行此操作,因为我想查询更多属性。

我在客户端使用带有pouchDB的couchDB。

1 个答案:

答案 0 :(得分:3)

不幸的是,您确实需要创建一个仅发出doc.data.date

的单独设计文档

另一个提示:没有必要emit(doc.myKey, doc)。您只需执行emit(doc.myKey),然后在{include_docs: true}时使用query()。这节省了引擎盖下的空间; this blog post中有详细信息。