2010-11-12 23 views
1

Je suis assez nouveau avec couchdb et je veux créer une vue basée sur une simple déclaration mysql. J'ai trouvé cette documentation: http://guide.couchdb.org/draft/cookbook.html mais malheureusement tous les cas d'utilisation ne sont pas inclus.traduire ce mysql en vue couchdb?

Mon MySQL Déclaration:

SELECT `title`, `id`, `author`, `date`, `text` FROM `news` WHERE `date`<=NOW() AND `author`='22' ORDER BY `date` DESC LIMIT 20,10; 

Merci beaucoup!

Répondre

1

Vous devez écrire une vue avec la fonction de carte suivante.

function(doc) { 
    emit([doc.author, doc.date], { 
      "title": doc.title, 
      "author": doc.author, 
      "date": doc.date, 
      "text": doc.text}); 
} 

Maintenant, vous pouvez interroger la vue en utilisant l'adresse suivante:

http://127.0.0.1:5984/dbname/_design/design_doc_name/_view/viewname?startkey=[22, "2010-11-12T10:20:30"]&endkey=[22, {}]&descending=true&skip=20&limit=10 

La date de la touche de démarrage doit être le datetime courant. Il n'y a aucun moyen d'émuler NOW() dans couchdb.

Une vue dans couchdb est juste une liste de paires clé-valeur triées par clé et elle fournit un moyen d'accéder à une plage de cette liste. Vous devez concevoir votre vue de manière à pouvoir obtenir les résultats dont vous avez besoin à l'aide d'une requête de plage.

+0

Un point intéressant ici est que vous avez implémenté 'LIMIT 20', et non' LIMIT 20,10'. –

+0

Merci pour votre réponse, mais comment est-il possible de faire ce décalage à la limite? – heuri

+0

Vous ne pouvez pas (au moins, pas avec une performance raisonnable). http://stackoverflow.com/questions/312163/pagination-in-couchdb –