2015-09-19 118 views
1

我的數據庫,其中包含下面的結構文檔:在cloudant查詢子字段:

{ 
    "_id": "xx", 
    "_rev": "xx", 
    "metadata": [ 
    { 
     "name": "par1", 
     "value": "val1" 
    }, 
    { 
     "name": "par2", 
     "value": "val2" 
    }, 
    { 
     "name": "par3", 
     "value": "val3" 
    }, 
    { 
     "name": "par4", 
     "value": "val4" 
    } 
    ] 
} 

我想運行查詢出頭,如:

{ 
    "selector": 
    { 
    "metadata.name":"par1" 
    } 
} 

,但目前我上面的選擇不起作用。 我已經創造了所有領域的文本類型的索引。基本上我想要做的查詢子場,其中子場本身是含有2名數據成員「name」和「值」的對象。任何幫助或線索將不勝感激。

+0

你使用什麼編程語言? –

+0

我正在使用java cloudant API。 –

回答

2

你選擇器不能直接訪問metadata.name因爲metadata是一個數組。它可滿足你的目標有幾個選擇:如果您已經創建了所有字段全文索引,你要搜索的任何領域「PAR1」

1),那麼你的選擇像一個下面應該工作。需要說明的是,它返回文檔,其中「PAR1」是任何索引字段:

{ 
    "selector": 
    { 
    "$text": "par1" 
    } 
} 

2)如果你想在哪裏元數據[I]。名稱字段包含「PAR1」的文件專門搜索,那麼你就可以創建鍵入元數據[I]。名稱值文檔視圖,其中地圖功能看起來像:

function (doc) { 
    if (doc.metadata) { 
    for (i = 0; i < doc.metadata.length; i++) { 
     emit(doc.metadata[i].name, doc._id); 
    } 
    } 
} 

那麼你可以得到所有的文檔,其中「名」是「PAR1」具有以下(更換所有與您的特定標識值在大括號):

curl -s https://{userid}:{password}@{userid}.cloudant.com/{db_name}/_design/{design_doc_name}/_view/{view_name}?key=%22par1%22&include_docs=true