CouchDB 2.0 - 如何在视图中自动增加键?

CouchDB 2.0 - How to autoincrement keys in a View?

在 CouchDB 2.0 中,我试图创建一个有序列表作为视图中的键,但它不起作用。

我的查看文档代码:

var i = 0;
function (doc) {
  if (doc.type === "comment") {    
    emit(i++, doc.webpages);
  }
}

结果是所有的key都为0,怎么才能让每个文档都有一个自增的key?
谢谢!

顺序 ID 可能不是大多数实际应用程序的最佳选择。例如,如果你要构建一个评论系统,我会像这样处理它(沙发文档中有一个 similar example):

评论将是具有如下结构的文档:

{
    "_id": "comment_id",
     "parent":"comment_id, or article_id if a top level comment"
     "timestamp" : "iso datetime populated by the server",
     "user_id": "the person who wrote the comment",
     "content": "content of the comment"
}

要显示给定父项(文章或父项评论)的所有顶级评论,您可以使用这样的视图:

def function(doc){
  emit([doc.parent, doc.timestamp, doc.user_id], doc._id)
}

要高效查询,您可以使用以下 query options 获取前二十个:

{
    "startkey": ["parent_id"],
    "endkey": ["parent_id", {}],
    "limit": 20,
    "skip": 0,
    "include_docs": true
}

评论将自动按发布日期排序,因为视图是按 [parent, datetime, and then user] 排序的。为了从中受益,除了父级之外,您没有通过密钥传递任何值。

另一件值得注意的事情是不将评论的内容传递给视图,而是使用 include_docs,您的索引将尽可能保持苗条。

对此进行扩展:

  • 如果你想显示对基本评论的回复,你可以改变 该评论 ID 的开始键和结束键。
  • 如果你想显示接下来的 20 条评论,只需将跳转到 20。
  • 如果您希望最初显示更多评论,只需提高限制值即可。

在回答您的评论时,如果您的文档中有数组或父项,例如:

"parents" : ["a100", "a101", "a102"]

其他一切都将保持不变,除了您将为每个父级发出一行。

def function(doc){
  doc.parents.map( function (parent){
    emit([doc.parent, doc.timestamp, doc.user_id], doc._id)
  });
}