【问题标题】:cloudant view for nested json documents嵌套 json 文档的 cloudant 视图
【发布时间】:2017-08-25 20:50:41
【问题描述】:

我正在尝试在 Cloudant DB 中创建一个视图,该视图将根据一个字段 (SAVE_TYPE_SUBMIT) 的值获取所有 JSON 文档。我的问题是,JSON 文档包含嵌套字段。请查看下面的示例文档。

{
  "_id ": "70f79cc9309fd8b2bcca90efd871f993 ",
  "_rev": "1-18fe726fc3d99f50a945ab30c9ffeb4b",
  "NAME": "qqq",
  "EMAIL": "qqq",
  "TITLE": "qq",
  "DATE_OF_REPORT": "2017/08/17",
  "PUBLIC_OFFICIALS_CONTACTED": [{
      "NAME_PUBLIC_OFFICIAL": "qq"
    },
    {
      "TITLE_PUBLIC_OFFICIAL": "qq"
    }
  ],
  "MANAGER": "qq",
  "SAVE_TYPE_SUBMIT": "Submit"
}

创建的视图是:

function(doc) { 
  if (("SAVE_TYPE_SUBMIT" in doc) && (doc.SAVE_TYPE_SUBMIT == "Submit")) { 
    emit (doc.LAST_UPDATE_BY, [doc.NAME, doc.EMAIL, doc.TITLE, doc.DATE_OF_REPORT, doc.PUBLIC_OFFICIALS_CONTACTED, doc.MANAGER]);
  }
}

当我尝试将此视图中的数据提取到我的应用程序中时,我没有获得嵌套字段的值,即 NAME_PUBLIC_OFFICIAL 和 TITLE_PUBLIC_OFFICIAL。我将这些字段视为 [object,object]。 请注意,PUBLIC_OFFICIALS_CONTACTED 可以包含多个名称和标题字段。

请帮助了解如何自定义视图以获取嵌套字段的值。我在这方面遇到了困难,任何指导或材料将不胜感激!

【问题讨论】:

    标签: json ibm-cloud cloudant


    【解决方案1】:

    创建这种形式的地图函数:

    function(doc) { 
      if (("SAVE_TYPE_SUBMIT" in doc) && (doc.SAVE_TYPE_SUBMIT == "Submit")) { 
        emit(doc.LAST_UPDATE_BY, { name:doc.NAME, email: doc.EMAIL, title: doc.TITLE, date: doc.DATE_OF_REPORT, officials: doc.PUBLIC_OFFICIALS_CONTACTED, manager: doc.MANAGER});
      }
    }
    

    这与您的 map 函数非常相似,只是它发出一个对象而不是数组的值。该对象可以表示原始文档的子集。

    如果您需要原始文档中的所有字段,则可以将函数修改为:

    function(doc) { 
      if (("SAVE_TYPE_SUBMIT" in doc) && (doc.SAVE_TYPE_SUBMIT == "Submit")) { 
        emit(doc.LAST_UPDATE_BY, null);
      }
    }
    

    并在查询视图时添加?include_docs=true 以将原始文档正文添加到响应中。

    【讨论】:

    • 非常感谢您在这方面的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2018-09-19
    • 2014-02-09
    相关资源
    最近更新 更多