具有多个键的映射函数
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.
中有详细信息
我正在运行具有以下映射函数的 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.