CouchDB多级视图地图功能?

时间:2019-01-21 04:14:41

标签: view couchdb

我不太确定该如何称呼我想要达到的目标,但是会尽可能多地解释它。我正在尝试使用视图从诸如层次结构等相关的单独文档中返回信息。例如,我有这三个文档。

{
  "_id" : "line_2c7e12d1",
  "docType" : "Line",
  "lineNumber": 30,
  "pageId" : "page_89bdd679f"
}

{
  "_id" : "page_89bdd679f",
  "docType" : "Page",
  "pageNumber" : 65,
  "bookId" : "book_3684caa2b"
}

{
  "_id" : "book_3684caa2b",
  "docType" : "Book",
  "bookName" : "Some Book Title",
}

而且我希望能够创建一个视图,该视图允许基于“行ID”(多级层次结构)从“书”中查找信息。

例如,“视图地图”功能就是这样的。

function (doc) {
  if(doc.docType == 'Line'){
    emit([doc._id, 1], doc.lineNumber)
    emit([doc._id, 2], {_id : doc.pageId})
    emit([doc._id, 3], {_id : doc.pageId}.pageNumber)
    emit([doc._id, 4], {_id : {_id : doc.pageId}.bookId})
  }
}

我知道前两条发射线正常工作,但是后两条发射线却不能正常工作。我只是想知道CouchDB中是否可以使用这种功能,或者是否应该以不同的方式构造数据。 (在最低级别包括所有层次结构信息,以便可以向上搜索)。或者,如果有人有其他建议。

感谢卡勒姆

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试将相关文档中的信息包括在视图中。在地图功能中,您只能访问当前文档,而不能在数据库中查询任何其他文档。

遵循这种方法see,您可以获得一种“联接”功能。

您的数据结构保持着强烈的关系风格,对于面向文档的数据库CouchDB来说,这可能不是最好的方法。