如何写CouchDb视图?

时间:2013-03-16 10:06:08

标签: mapreduce couchdb

我在couchDB数据库中有这些文档的列表。

{
   "_id": "9",
   "_rev": "1-f5a9a0b76c6ae1fe5e20f1a1f9e6f8ba",
   "Project": "Vaibhava",
   "Type": "activity",
   "Name": "Civil_Clearence",
   "PercentComplete": "",
   "DateAndTime": "",
   "SourcePMSId": "1049",
   "ProgressUpdatedToPMSFlag": "NO",
   "UserId": "Kundan",
   "ParentId": "5"
}

如何编写一个视图函数,以便当我传递doc._id作为键时,我必须得到doc._id的所有兄弟姐妹(与我发送的密钥相同的父文档的文档)? ?

2 个答案:

答案 0 :(得分:1)

如另一个答案所述,单一请求无法做到这一点。

但是,您可以执行以下操作:

  1. 定义在ParentID上编入索引的地图(没有缩小)视图:

    function(o) {
      if (o.ParentID) {
        emit(o.ParentID);
      }
    }
    
  2. 向您的对象发送第一个请求以了解其父级的ID:

    GET /myDatabase/myObject
    
  3. 然后向您的观点发送请求

    GET /myDatabase/_design/myApp/_view/myView/?key="itsParent"&include_docs=true
    
  4. 有几个请求不应该在这里造成太大的伤害,因为它们的数字(2)是不变的。 此外,您可以将它们隐藏在NodeJS处理的单个请求之后。

答案 1 :(得分:0)

不幸的是,您需要将两个map-reduce函数链接在一起才能实现此结果,而CouchDB中无法使用该功能。有关详细信息,请参阅this question