2012-06-23 13 views
6

ho alcuni documenti in CouchDB contenenti campi che sono array di id per i diversi documenti associati:vista CouchDB che ricerca un campo array per valori passati come array chiave

{ 
    associatedAssets: ["4c67f6241f4a0efb7dc2abc24a004dfe", "270fd4508a1222a1e2a27cbe7f002d9z"] 
} 

vorrei scrivere un guarda che mi permetta di passare in una chiave che è essa stessa una matrice di iD, e poi tornare documenti di cui associatedAssets campi contengono uno o più dei ids trasmessi tramite la chiave dell'array es

$.ajax({ 
    url: "/db/_design/design_doc/_view/summaryByAssociatedAssets", 
    type: "post", 
    data: JSON.stringify({keys: ["4c67f6241f4a0efb7dc2abc24a004dfe", "6c67f6241f4a0efb7dc2abc24a004dfd"]}), 
    dataType: "json", 
    contentType: "application/json", 
}) 
.done(function(resp){ 
    console.log(resp[0]); 
}); 

sarebbero tornati documenti il ​​cui allineamento associatedAssets contiene uno o più dei tasti "4c67f6241f4a0efb7dc2abc24a004dfe", "6c67f6241f4a0efb7dc2abc24a004dfd".

Non riesco ad accedere alle chiavi nel mio punto di vista, quindi non sono sicuro se posso fare questo? C'è un modo migliore per realizzare questo?

Grazie!

risposta

11

La vista ha solo bisogno di generare una riga di output per associatedAssets elemento, qualcosa di simile a questo:.

Quindi è necessario regolare la chiamata in modo che finisca per passare quell'array keys come parametro della stringa di query, che restituirà solo le righe dalla vista che corrispondono alle chiavi in ​​tale matrice.

Un totale da parte - assumendo una versione recente CouchDB, le migliori pratiche potrebbe essere quella di sostituire il doc nel vostro emit con { _id: doc._id } e quindi utilizzare include_docs=true nella query in modo che le indice di vista non viene riempito (inutilmente) con i documenti pieni .

+0

Questo ha funzionato perfettamente! Grazie! – Troy

+0

Stai molto gradito :) – smathy

+0

sto facendo lo stesso, ma non è possibile ottenere il parametro di query per le chiavi giuste, tutte le idee su come fare questo lavoro? Heres che cosa funziona:? Tasti = [[ "apex_fundamentals"]], ma il seguito non funziona: keys = [ "apex_fundamentals", "javascript_and_visualforce"] (NOTA: È possibile che questo è gestito attraverso to_json e URL codificato) e tutto in rotaie) –

0

Nel codice della vista è possibile accedere a qualsiasi cosa nel documento stesso, ma non c'è modo di accedere i parametri che si passano.

Si potrebbe usare viste temporanee che vengono generati per la query specifica che si sta facendo .

Si potrebbe anche usare al posto elasticsearch. ElasticSearch ha una query DSL molto più ricca perché questo è il punto centrale di ElasticSearch. CouchDB River ti consente di indicizzare automaticamente tutti i documenti da CouchDB.

Utilizzando elasticsearch, si può solo cercare qualsiasi documento il cui associatedAssets contiene alcun elemento da una lista che si passa in

+2

È vero che non è possibile accedere a nessun parametro, ma digitando sensibilmente l'output è possibile utilizzare il parametro di stringa di query 'key' o' keys' incorporato in CouchDB per limitare le righe emesse solo a quelle corrispondenti a tali chiavi. – smathy

+0

Grazie !! Stavo cercando quella caratteristica esatta (il parametro chiave) e pensavo che non esistesse. – nickgroenke

+0

Nessun problema, [ecco qui] (http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options) un elenco completo delle opzioni di query disponibili. – smathy

Problemi correlati