【问题标题】:How to get from CouchDB only certain fields of certain documents with a single request?如何通过单个请求仅从 CouchDB 获取某些文档的某些字段?
【发布时间】:2016-05-20 02:41:09
【问题描述】:

创建一个视图,该视图仅返回文档中值的子集,每个值的键和值都包含在 json 字符串中。就像如果一个给定的视图返回一个如下所示的文档,是否可以为一个请求获取一些字段信息?谢谢你 { "total_rows":10, "offset":3, "rows":[{ "id":"doc1", "key":"abc123", "value": { "_id":"aaaa", "_rev":"bbb", "field1":"abc", "field2":"bcd", "field3":"cde", "field4":"123", "field5":"789", "field6":"aa@email.com", "field7":"ttt", "field8":"iii", "field9":[{ "field91":"tyui", "field92":"55555" }], "field10"::"0000", "field11"::"55555", "field12"::"0030"......... } } 我只想创建一个仅返回以下某些字段的视图: { "field1":"abc", "field2":"bcd", "field3":"cde", "field4":"123", "field5":"789", "field6":"aa@email.com", "field7":"ttt", "field8":"iii", "field9":[{ "field91":"tyui", "field92":"55555" }] }

【问题讨论】:

    标签: mapreduce couchdb couchdb-futon


    【解决方案1】:

    一个映射函数,它发出一个只包含选定字段的新文档。例如,我们只映射 field1(字符串)和 field9(数组):

    function map(doc) {
      emit(doc._id, {
        field1: doc.field1, 
        field9: doc.field9
      });
    }
    

    在上面的例子中,每个文档都会被触发,键是原始文档 ID,值是您需要的映射字段。 如果您打算稍后添加 reduce 函数,这将非常有用。

    根据您的用例,您可能只想发出映射的对象:

    function map(doc) {
      emit({
        field1: doc.field1, 
        field9: doc.field9
      });
    }
    

    请看http://guide.couchdb.org/draft/views.html 构建数据视图的文档很不错,你可以通过实验发现很多..

    【讨论】:

    • 非常感谢您的好建议和分享学习资料在这种情况下,如果field1是关键,我可以得到像doc.field1 ="aaa"这样的选择9个字段结果,如下: function map(doc) { emit(doc.field1,{ field1: doc.field1, field2: doc.field2, ..... field9: doc.field9 }); } 并调用 http://...viewName?key="aaa",结果包括 _id、key 和 value 但是如果我只想使用 doc.field1 ="aaa" 获取所有选定的字段值,而不是包括像key和_id,我该怎么办?
    • 我认为您无法避免那些从 CouchDB 回来的人。但是“摆脱”客户端的这些字段应该不难,即:映射到另一个对象(我猜使用javascript,如果这是一个网络应用程序?)。如果不了解您的用例,就很难判断。
    • 谢谢 Seb,这不是网络应用程序我只是在 couchdb futon 上做一些练习,我想从结果中“摆脱”那些第一个字段,如 _id、键和值:, :{ “id”:“xxxx”,“key”:“xxxx”,“value”:......................顺便说一句,我可以知道您的电子邮件或其他可以与您联系的电子邮件吗?
    • 希望你能告诉我,为什么我不能像下面的地图一样在 couchdb 中运行结果,这是怎么回事?函数(文档){ var json_data = 文档; json_data = json_data.rows; for (var i = 0; i
    • 您无法摆脱有问题的字段:id、key、c​​ouchdb 端的值。您必须在您的客户端上执行此操作。客户端是从其他地方提供的网络应用程序还是沙发应用程序 - 无关紧要。我不明白为什么这些领域有问题,你能解释一下吗?
    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2021-08-31
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2015-01-23
    相关资源
    最近更新 更多