2017-08-25 47 views
0

我想在Cloudant DB中创建一个视图,它将根据一个字段的值(SAVE_TYPE_SUBMIT)获取所有JSON文档。我的问题是,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可以包含多个名称和标题字段。

请帮助理解如何定制视图以获取嵌套字段的值。我对此很难接受,任何指导或材料都将受到高度赞赏!

回答

0

创建这种形式的映射函数:

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}); 
    } 
} 

这是非常相似到地图功能,除了它发出一个值,它是一个对象,而不是阵列。该对象可以表示原始文档的子集。

如果你需要从原始文档的所有字段,那么你可以修改的功能:

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

和查询视图将原稿机构添加到响应时添加?include_docs=true

+0

非常感谢您对此的帮助! – Aparna