Mapreduce 如何编写CouchDb视图?

Mapreduce 如何编写CouchDb视图?,mapreduce,couchdb,Mapreduce,Couchdb,我的couchDB数据库中有这样的文档列表 { "_id": "9", "_rev": "1-f5a9a0b76c6ae1fe5e20f1a1f9e6f8ba", "Project": "Vaibhava", "Type": "activity", "Name": "Civil_Clearence", "PercentComplete": "", "DateAndTime": "", "SourcePMSId": "1049", "Progr

我的couchDB数据库中有这样的文档列表

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

如何编写视图函数,以便在我将
文档作为密钥传递时,必须获得该
文档的所有同级。\u id
(父id与我发送的密钥相同的文档)?

不幸的是,您需要将两个map reduce函数链接在一起以实现此结果,而该功能在CouchDB中不可用。有关更多信息,请参阅。

正如另一个答案中所述,单次请求是不可能做到这一点的

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

  • 定义一个映射(不带reduce)视图,该视图索引于
    ParentID

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

    GET /myDatabase/myObject
    
  • 然后向您的视图发送请求

    GET /myDatabase/_design/myApp/_view/myView/?key="itsParent"&include_docs=true
    
  • 有几个请求在这里不会造成太大的伤害,因为它们的数量(2)是恒定的。
    此外,您还可以将它们隐藏在NodeJS处理的单个请求后面。

    在wiki中查看关于