如何在一个映射函数中使用CouchDB进行搜索和排序
我的CouchDB知识有点结巴 我有一个内容数据库,它用一系列标记进行标记,并有一个创建日期 我想创建一个视图,该视图可以提取有限数量的带有特定标记的最新故事 例如,最新的6个故事标记为“业务” 遇到了,这似乎让我几乎到达了我需要去的地方,但我缺少了一个关键元素,我认为这就是如何在按一个键进行搜索的同时手工创建查询字符串 这是我的地图功能如何在一个映射函数中使用CouchDB进行搜索和排序,couchdb,Couchdb,我的CouchDB知识有点结巴 我有一个内容数据库,它用一系列标记进行标记,并有一个创建日期 我想创建一个视图,该视图可以提取有限数量的带有特定标记的最新故事 例如,最新的6个故事标记为“业务” 遇到了,这似乎让我几乎到达了我需要去的地方,但我缺少了一个关键元素,我认为这就是如何在按一个键进行搜索的同时手工创建查询字符串 这是我的地图功能 function(doc) { if (doc.published == "yes" && doc.type == "news") {
function(doc) {
if (doc.published == "yes" && doc.type == "news") {
for (var i = 0; i < doc.tags.length; i++) {
if (doc.tags[i]) {
emit([doc.created, doc.tags[i]], doc);
}
}
}
}
功能(doc){
如果(doc.published==“yes”&&doc.type==“news”){
对于(变量i=0;i
那么,如何查询标记为“Business”的所有文档的视图,这些文档是基于创建的最新文档
创建的属性是一种日期可排序格式。首先,我要切换您的发送顺序:
emit([doc.tags[i], doc.created]);
(也可以省略doc
,您只需添加include\u docs=true
即可获得整个文档,并且您的视图在此过程中不会占用太多磁盘空间)
现在,您可以使用以下查询字符串查询标记为“Business”
的所有故事:
startkey=["Business"]&endkey=["Business",{}]
您将获得标签业务的所有文档,并按日期进行排序
这利用了,这基本上是控制索引如何排序/查询的规则。对于这样的复杂键,将分别对数组的每个项进行排序。(即,第一个键排序第一,第二个键排序第二,等等)这就是为什么顺序很重要,因为查询视图索引时必须始终从左向右移动
如果您想要最新的6,您的查询字符串需要更改:
descending=true&limit=6&endkey=["Business"]&startkey=["Business",{}]
注意由于
降序
参数的工作方式,您需要交换开始键
/结束键
值。请参阅进一步的解释。好的,我想我已经明白了这一点,但我不太确定我是否完全理解它
我找到了关于复杂键和搜索排序的信息
我的映射函数如下所示:
function(doc) {
if (doc.published == "yes" && doc.type == "news") {
for (var i = 0; i < doc.tags.length; i++) {
if (doc.tags[i]) {
emit([doc.tags[i], doc.created], doc);
}
}
}
}
功能(doc){
如果(doc.published==“yes”&&doc.type==“news”){
对于(变量i=0;i
要使用它进行查询和排序,查询如下所示
http://localhost:5984/database/_design/story/_view/tagged?limit=10&startkey=[“业务”]&endkey=[“业务”,{}]&descending=false
我得到了我想要的结果,但我不能完全确定我是否完全理解。我将对我的答案进行更多解释