2014-01-23 49 views
0

我有這個結構的文檔中:在一個查詢查詢由父母和孩子的關鍵

{ 
    "_id": "a04ecdc29276760e689dd8148d000e7c", 
    "type": "user", 
    "user": "xxx", 
    "categories": [ 
     { 
      "type": "TYPE1", 
      "id": "3523683f7930be3a2e5c8496c800083a" 
     }, 
     { 
      "type": "TYPE2", 
      "id": "bd2098d428d36ffd895f37b872000951" 
     } 
    ] 
} 

現在,我想(最好)獲取用戶和他/她相關的類別,ID分別到其他引用文檔,因此include_docs,按用戶和類別類型過濾。我管理這個:

function (doc) { 
    if (doc.type === "user") { 
     emit(doc.user, null); 
     if (doc.categories) { 
      for (var i = 0, child; child = doc.categories[i]; ++i) { 
       emit(child.type, {_id: child.id}); 
      } 
     } 
    } 
} 

我可以使用HTTP GET運行此:

http://localhost:5984/_design/foo/_view/by_user?startkey=["xxx"]&endkey["xxx",{}]&include_docs=true 

,這將給我的用戶和相關的類別,不考慮類別類型。

我該如何去查詢用戶和類別類型作爲關鍵參數?我知道我可以爲每個類別類型創建一個視圖,並且發射([doc.user,doc.TYPE]),但看到類別是隨時創建的,這可能不是一個選項。

這甚至可以用一個查詢來完成嗎?

回答

0

你的密鑰也可以是任意的JSON。您EMIT更改爲:

emit([doc.user, child.type], ...)

然後你斯塔基是:

["xxx", "TYPE1"]

和endkey:

["xxx", "TYPE1", {}]

+0

哇,它是那麼容易。謝謝你,我的好先生! – grilledtomatos