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)
});
}
在 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)
});
}