具有多个键的映射函数

Map Function with multiple keys

我正在运行具有以下映射函数的 couchDB 服务器:

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

我可以使用类似这样的方式轻松查询一个 appVersion 或一系列 appVersion:

Start key: ["1.2.3", 0] End key: ["2.0.0", 10000000000000]

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

Start key: ["1.2.3", 1420066800000] End key: ["1.2.3", 1422572400000]

我不能做的是在两个日期之间获取所有文档,而不管它们的应用程序版本如何。这不起作用:

Start key: ["0.0.0", 1420066800000] End key: ["9.9.9", 1422572400000]

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

"get all docs with appVersion between 0.0.0 and 9.9.9 OR date between 1420066800000 and 1422572400000".

但我想要的是:

"get all docs with appVersion between 0.0.0 and 9.9.9 AND date between 1420066800000 and 1422572400000"

有没有办法使所有三个查询都起作用?我必须更改地图功能吗?如何?或者我是否必须为最后一种查询创建另一个地图函数。我想使用一个映射函数来执行此操作,因为我想查询更多属性。

我在客户端使用 couchDB 和 pouchDB。

不幸的是,您确实需要创建一个单独的设计文档,它只发出 doc.data.date

另一个提示:没有必要emit(doc.myKey, doc)。您可以只执行 emit(doc.myKey),然后在 query() 时使用 {include_docs: true}。这在幕后节省了 space; this blog post.

中有详细信息