首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在CouchDB中进行一对多“加入”的最佳方法

在CouchDB中进行一对多“加入”的最佳方法
EN

Stack Overflow用户
提问于 2010-06-13 18:43:04
回答 1查看 14K关注 0票数 35

我正在寻找一个相当于"SQL“的CouchDB。

在我的示例中,有一些CouchDB文档是列表元素:

代码语言:javascript
运行
复制
{ "type" : "el", "id" : "1", "content" : "first" } 
{ "type" : "el", "id" : "2", "content" : "second" } 
{ "type" : "el", "id" : "3", "content" : "third" } 

有一个文件定义了列表:

代码语言:javascript
运行
复制
{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }

正如您可以看到的,第三个元素被删除了,它不再是列表的一部分。因此,它绝不能成为结果的一部分。现在,我想要一个返回内容元素的视图,包括正确的顺序。

其结果可能是:

代码语言:javascript
运行
复制
{ "content" : ["second", "first"] }

在这种情况下,元素的顺序已经达到了应有的程度。另一个可能的结果是:

代码语言:javascript
运行
复制
{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }

我开始编写地图函数:

代码语言:javascript
运行
复制
map = function (doc) {
  if (doc.type === 'el') {
    emit(doc.id, {"content" : doc.content}); //emit the id and the content
    exit;
  }
  if (doc.type === 'list') {
    for ( var i=0, l=doc.elements.length; i<l; ++i ){
      emit(doc.elements[i], { "order" : i }); //emit the id and the order
    }
  }
}

这是我所能得到的。你能纠正我的错误,写一个精简函数吗?请记住,第三个文档不能是结果的一部分。

当然,您也可以编写不同的映射函数。但是,不能更改文档的结构(每个条目有一个定义元素文档和一个条目文档)。

编辑:不要错过JasonSmith对他的回答的评论,在他的回答中,他描述了如何做得更短。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3033443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档