Join 如何获取其他文档';映射函数中按文档id显示的数据

Join 如何获取其他文档';映射函数中按文档id显示的数据,join,view,couchdb,Join,View,Couchdb,我在视图中“连接”某些文档时遇到问题。我的模式是这样的:类型为“category”的文档可以包含类型为“page”的文档的嵌入ID数组。两者都有一个字段“name” 我的文件: { "_id": "887c28dcf6dd8429d404d276b900b203", "_rev": "3-c4d1e0c8378bb0081b5fe3522ee649a0", "TYPE": "category", "NAME": "Home", "PAGES": [ {

我在视图中“连接”某些文档时遇到问题。我的模式是这样的:类型为“category”的文档可以包含类型为“page”的文档的嵌入ID数组。两者都有一个字段“name”

我的文件:

{
   "_id": "887c28dcf6dd8429d404d276b900b203",
   "_rev": "3-c4d1e0c8378bb0081b5fe3522ee649a0",
   "TYPE": "category",
   "NAME": "Home",
   "PAGES": [
       {"PAGE_ID": "887c28dcf6dd8429d404d276b900ad8f"},
       {"PAGE_ID": "887c28dcf6dd8429d404d276b900b203"},
       {"PAGE_ID": "887c28dcf6dd8429d404d276b900bae0"}
   ]
}

{
   "_id": "887c28dcf6dd8429d404d276b9008c01",
   "_rev": "1-afd54c654ae5afa56a3fbd7b1ba119d2",
   "TYPE": "page",
   "NAME": "Foo"
}
现在,我想使用此映射功能将这些元素连接到视图中:

function(doc) {
  if (doc.TYPE == "category") {
    for (id in doc.PAGES) {
      emit(doc.NAME, doc.PAGES[id].PAGE_ID);
    }
  }
}
但是我要的不是页面ID,而是引用文档的名称。
基本上是这样,但它们不显示map函数。有什么想法吗?

您需要在输出值的某处包含一个
\u id
字段。然后,使用
include_docs=true
,视图将包含链接文档而不是源文档。例如:

function(doc) {
   if (doc.TYPE == "category") {
      for (var x = 0; x < doc.PAGES.length; x++) {
         emit(doc.NAME, { _id: doc.PAGES[x].PAGE_ID });
      }
   }
}
功能(doc){
如果(单据类型==“类别”){
对于(var x=0;x
查询此视图时,将
include\u docs=true
添加到URL。您的视图输出将为每一行添加一个名为
doc
的新字段。通常,该字段将包含完整的源文档。在这种情况下,它将包括您所引用的链接文档


编辑顺便说一句,您对
循环中的…使用了
中…的
用于循环对象的属性。您需要使用一个简单的
for
循环来迭代这样的数组。

嗨,现在我得到了一个奇怪的结果:列表的第一页得到了解析,然后我得到了两个带有未解析页面ID的类别,然后是第四页(再次解析)。但我有两个类别(第一个包含三页,第二个只有一页)和四页。我不禁注意到,您的第二个
页面ID
与文档本身的
\u ID
相同。哦,我刚刚注意到你的JS是错的。。。(注意我的回答有变)哦,我在ID上犯了一个愚蠢的复制粘贴错误,对此我很抱歉。现在它工作了,谢谢!也可以考虑包含一个<>代码> Rev字段,因此当你<代码>?包含DeBixDOCS= Trime< /Cord>时,你将得到对应于该MAP输出的实际文档。(或者,如果您不使用include_docs,您现在仍然可以修改版本,以便在不重新获取文档的情况下更新文档。)