如何通过设计文档调用curl请求来获取数据?

时间:2017-03-31 13:32:04

标签: curl couchdb

我的设计文档是这样的......

{
  "_id": "_design/dataFilter",
  "_rev": "1-29032a3479f5bfb016ea4e2f5e8afae3",
  "filters": {
    "getUser": "function (doc, req) { return (req.query.type == doc.type && req.query.id == doc._id) }",
    "getCustomer": "function (doc, req) { return (req.query.type == doc.type && req.query.id == doc.user) }",
    "getOrders": "function (doc, req) { return (req.query.type == doc.type && req.query.id == doc.user) }",
    "getCloths": "function (doc, req) { return (req.query.id == doc._id) }",
    "getDevices": "function (doc, req) { return (req.query.type == doc.type && req.query.id == doc._id) }"
  }
}

这就是我尝试从couchdb获取记录的方式。

curl -X GET http://example.com/database?filter=dataFilter/getCustomer -d '{"query_params":{"id":"jayesh","type":"user"}}'

如何在设计文档的帮助下从couchdb中获取记录?

1 个答案:

答案 0 :(得分:1)

关于couchdb的文档,过滤器只能用于_changes Feed: http://docs.couchdb.org/en/2.0.0/couchapp/ddocs.html#filter-functions

您可以使用map / reduce函数的视图: http://docs.couchdb.org/en/2.0.0/couchapp/ddocs.html#view-functions

您只需要emit与过滤器匹配的所有文档。 emit - 函数的关键和值可以根据需要使用。

在您的示例中,design-doc看起来像这样:

这看起来像这样:

{
  "_id": "_design/dataFilter",
  "_rev": "1-29032a3479f5bfb016ea4e2f5e8afae3",
  "views": {
    "getUser": {
      "map": "function(doc) { if (req.query.type == doc.type && req.query.id == doc._id) { emit(doc._id, "something") } }"
    },

...

  }
}

在计算了视图(大数据库上可能需要一些时间)之后,您可以使用以下命令获取结果:

GET DB/_design/dataFilter/_view/getUser