2017-08-25 12 views
0

Cloudant DBで1つのフィールド(SAVE_TYPE_SUBMIT)の値に基づいてすべてのJSONドキュメントを取得するビューを作成しようとしています。私の問題は、JSON文書にはネストされたフィールドが含まれていることです。以下のサンプル文書をご覧ください。ネストされたjsonドキュメントのcloudantビュー

{ 
    "_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の値を得ることはありません。これらのフィールドは[オブジェクト、オブジェクト]として表示されます。 PUBLIC_OFFICIALS_CONTACTEDに複数のNameフィールドとTitleフィールドを含めることができます。

ネストされたフィールドの値を取得するためにビューをカスタマイズする必要がある方法を理解してください。私はこれで苦労しており、指導や教材は高く評価されます!

答えて

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