嵌套 json 文档的云视图
cloudant view for nested json documents
我正在尝试在 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 可以包含多个名称和标题字段。
请帮助理解需要如何自定义视图以获取嵌套字段的值。我在这方面遇到了困难,任何指导或 material 将不胜感激!
创建这种形式的地图函数:
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
以将原始文档正文添加到响应中。
我正在尝试在 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 可以包含多个名称和标题字段。
请帮助理解需要如何自定义视图以获取嵌套字段的值。我在这方面遇到了困难,任何指导或 material 将不胜感激!
创建这种形式的地图函数:
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
以将原始文档正文添加到响应中。