2011-01-17 5 views
2

Je cherche à interroger mon CouchDB de telle sorte que certains des champs d'un document puissent être des caractères génériques correspondant à n'importe quelle demande de clé.La clé CouchDB correspond toujours

Exemple:

function(doc) { 
    emit(doc.some_field, doc); 
} 

?key=100 correspondrait à la fois le document avec un_champ de et de un_champ valeur comme *.

Est-ce possible? Y a-t-il un bidouillage pour le faire?

Répondre

0

De CouchDB wiki:

CouchDB stocke en fait la [clé, docid] paire comme la clé dans la btree. Cela signifie que:

  • vous savez toujours quel document la clé et la valeur provenaient (il est exposé que le champ « id » dans le résultat de vue)
  • vue lignes avec des clés égales sorte en augmentant docid.

Je ne pense pas que les champs génériques utilisés comme une partie d'une clé sont possibles car ils sont classés. Supposons qu'ils sont possibles. Ensuite, si vous essayez d'interroger une plage de clés à partir d'une vue, les lignes contenant un caractère générique seront renvoyées avec n'importe quelle plage de clés. Cela signifie qu'ils sont partout. Mais c'est impossible parce qu'ils sont triés. C'est une rangée avec un joker qui est placé entre une paire d'autres rangées dont l'une a une plus grande clé et l'autre une plus petite.

+0

Ouais, je suppose que s'il y avait une façon de faire un OR bien que cela fonctionne. comme 100 OU *. Je dois utiliser couchdb-lucene. –

+0

L'utilisation de deux requêtes peut servir de solution de contournement: la première requête pour votre clé (? Key = 100) et la seconde pour les lignes génériques. Si les lignes génériques de cours doivent avoir des clés adjacentes. – ssmir

+0

http://wiki.apache.org/couchdb/View_collation?action=show&redirect=ViewCollation#String_Ranges dit que tout est possible :) –

1

Comme par le CouchDB documentation vous pouvez faire:

?startkey="key"&endkey="key\ufff0" 

pour correspondre clé *.

+1

Si j'ai bien compris la question, l'auteur veut pas une requête avec un caractère générique. Il a besoin de lignes d'une vue pour avoir des caractères génériques dans leurs clés. OT: merci pour votre travail sur couchdb, etc :) – ssmir

+0

À droite, j'ai besoin de n'importe quelle clé que je passe pour finir par correspondre à une clé générique stockée dans la base de données. Je sais que cela semble probablement bizarre ... Mais pour un gestionnaire de paquets pouvoir demander tous les paquets compilés pour les propriétés système de X, Y et Z mais certains paquets sont génériques et peuvent correspondre à X et Y mais pas à Z Cependant, ils ont le champ générique marqué comme *. –

+2

Ah, désolé, j'ai mal compris la question alors.Vous pouvez utiliser une requête POST à ​​la vue pour obtenir un OR logique pour plusieurs clés si votre corps POST ressemble à ceci: '{" keys ": [" key1 "," key2 ", ...]}' Voir http://wiki.apache.org/couchdb/HTTP_view_API –

Questions connexes