12
votes

Plusieurs clés varient comme paramètres à une vue CouchDB

Le problème sous-jacent - disons que mes documents ont "catégories" em> et horodatés em>. Si je veux tous les documents dans la catégorie "foo" em> qui ont un horodatage dans les deux dernières heures, c'est simple: xxx pré>

puis interroge >

POST server:5894/.../myview
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]]


0 commentaires

3 Réponses :


4
votes

Votre probablement mieux de faire deux questions. CouchDB peut gérer de multiples requêtes simultanées assez bien, alors tournez plusieurs procédés / threads et interrogation pour FOO et Bar Docs séparément.

COUCHDB ne prend actuellement pas en charge de multiples requêtes de gamme. Les clés orientées et anding sont à peu près pas faisables dans une requête.


1 commentaires

Eh bien, vous pouvez ou des clés à travers la liste des clés, mais oui. Merci.



9
votes

Il y a une demande de problème de CouchDB pour vous laisser faire cela. J'ai joint une simple garantie de garantie au 0.10.1 à ce billet pouvant fonctionner pour vous. Cela fonctionne pour moi et me permet de faire des choses comme: xxx

dans le corps de poste, ce qui me permet d'obtenir toutes les données sur plusieurs identifiants de suivi, pour une gamme de dates. J'appelle avec groupe = true & group_level = 1 pour avoir les résultats groupés par identifiant de suivi. Les niveaux de groupe plus profonds me permettraient de regrouper par suivi de la carte d'identité | Année, suivi de suivi | Année | mois etc.

Plusieurs connexions étaient une surcharge non décalable pour moi, car je cherche à faire en 2000 :) ( Non, une nouvelle vue n'est pas une option - nous sommes déjà à 400 Go pour les données plus une vue!)

Le problème et le patch est sur https://issues.apache.org/jira/browse/couchdb-523 .


0 commentaires

4
votes

Ceci a été ajouté dans les versions plus récentes de CouchDB. Pour ajouter plusieurs gammes de clés de démarrage / d'extrémité, vous pouvez utiliser une requête postale à votre vue, avec un corps qui ressemble à quelque chose comme ceci:

{
  "queries": [
    { "startkey": 10, "endkey": 11 },
    { "startkey": 16, "endkey": 18 }
  ]
}


5 commentaires

Des références DOC pour cela?


Pas encore, j'ai promis de corriger les docs comme nous ne les avons pas encore! Je l'ai fait bloguée si un autre exemple serait utile Lornajane.net/poststs / 2017 / multiple-recherche-Keys-in-Couchdb


Ah, j'ai trouvé que les Documents API existent déjà, ils sont ici: docs.couchdb.org/fr/2.0.0/api/ddoc/...


Ehh, n'est-ce pas vraiment ce que l'OP a demandé? J'ai compris que l'objectif est de ne pas lancer une requête qui sélectionne des enregistrements avec une clé (unidimensionnelle) à partir de l'Union de deux gammes, mais plutôt de sélectionner ces enregistrements qui ont une touche mutli-dimensionnelle avec les deux dimensions dans une certaine gamme. Pensez-y comme un index sur les données spatiales 2D sur lesquelles vous souhaitez lancer une requête pour trouver des points avec X dans la plage de x dans la plage [x0, x1] et y dans [y0, y1], comme vous interrogeriez un quadtree. Dans l'article de OP, x0 = x1 = "foo" et y0 = maintenant-2h, y1 = maintenant.


C'est comment réaliser ce que l'OP a demandé. CouchdB ne peut filtrer que sur une plage de valeurs continue lorsqu'elles viennent en vue (c'est-à-dire triés par les touches de la vue). Si les résultats que vous voulez ne sont pas les uns à côté des autres dans la sortie de la vue, vous devez rechercher plusieurs gammes à l'aide de l'approche que j'ai décrite. J'espère que cela rend plus clair!