2011-10-26 6 views
0

Les documents CouchDB semblent avoir une clé attachée; il ne se présente pas lors de la récupération d'un seul document, mais vous pouvez les utiliser pour récupérer des gammes de documents tels que:Définition explicite des clés de document CouchDB

wget "http://localhost:5984/monitor20n/_all_docs?startkey=1111&endkey=2222 

Cependant, il semble que la clé est toujours le même que l'identifiant du document, de sorte que tout ce que vous obtenez est des choses comme ceci

{"total_rows":14269,"offset":0,"rows":[ 
{"id":"128127896626798592","key":"128127896626798592","value":{"rev":"1-4e07e2c4b4eddfad5846ddf905337197"}}, 
{"id":"128128575021907970","key":"128128575021907970","value":{"rev":"1-43d983af1e837a4415b6167cae3b5de8"}}, 
... and so on }} 

(voir ici clé == id). Cependant, vous pouvez utiliser des clés plus complexes dans les vues, y compris les vecteurs qui permettent une interaction beaucoup plus complexe; Au moins, vous pouvez définir les clés de vue afin que vous puissiez maintenant à l'avance ce qu'il faut rechercher sans rechercher les ID de document. La question est maintenant: pouvez-vous définir ces touches lors de la création d'un document? Ou peut-être après l'avoir créé? Une solution de contournement évidente consiste à créer une vue cependant, je voudrais que ce

function (doc) { 
    emit(doc.key,doc) 
} 

savoir s'il y a une façon plus directe d'obtenir le même effet.

Répondre

4

Les clés sont une partie importante des vues CouchDB. Avec une vue, la clé ne doit pas nécessairement être l'ID du document. Mais la seule façon de produire une clé est d'utiliser la fonction Emit depuis une vue. Il n'y a pas de propriété que vous pouvez définir qui deviendra automatiquement la clé.

Pensez à _all_docs comme une vue intégrée. Pour être cohérent, il suit la même sortie qu'une vue normale et utilise l'identifiant comme clé. Mais vous ne pouvez pas changer la vue _all_docs. Si vous vouliez fournir votre propre _id lorsque vous enregistrez un document, cela finira par être la clé. Donc, si vous vouliez des 'clés' personnalisées dans la vue '_all_docs', vous pouvez créer des documents comme ceci:

{_id: 'Sample1'}, {_id: 'My2'}. et après qu'ils sont enregistrés, lorsque vous demandez la vue '_all_docs' vous obtiendrez: {"total_rows": 2, "offset": 0, "rows": [ {"id": "Sample1", "clé" : "Sample1", "value": {"rev": "1-4e07e2c4b4eddfad5846ddf905337197"}}, {"id": "My2", "clé": "My2", "valeur": {"rev": " 1-43d983af1e837a4415b6167cae3b5de8" }}, ... et ainsi de suite}}

Voici un lien sur ce qui fait un documentID:

http://wiki.apache.org/couchdb/HTTP_Document_API#Special_Fields

Bien qu'il ne dit pas explicitement, vous ne pouvez pas utiliser des objets ou des tableaux comme DocumentIDs.

Espérons que ça aide.

+0

Donc, je suppose qu'une autre solution serait de générer des identifiants en utilisant une règle heuristique autour de la clé que vous voulez utiliser. Par exemple, rassembler des dates si vous voulez faire une recherche par plage de dates, n'est-ce pas? – jjmerelo

+0

Vous pourriez vouloir commencer une question plus spécifique sur ce que vous essayez de faire. Voici un bon exemple: http://stackoverflow.com/questions/3079040/range-keys-in-couchdb-views –

Questions connexes