2012-03-01 10 views
2

Pourriez-vous s'il vous plaît m'aider à créer une vue. Ci-dessous l'exigenceCouchdb view Requêtes

select * from personaccount where name="srini" and user="pup" order by lastloggedin 

Je dois envoyer le nom et l'utilisateur en entrée à la vue et les données doivent être triées par lastloggedin.

Voici la vue que je l'ai créé, mais il ne fonctionne pas

{ 
    "language": "javascript", 
    "views": { 
     "sortdatetimefunc": { 
      "map": "function(doc) { 
       emit({ 
        lastloggedin: doc.lastloggedin, 
        name:   doc.name, 
        user:   doc.user 
       },doc); 
      }" 
     } 
    } 
} 

Et ce la commande curl iam utilisant:

http://uta:[email protected]:5984/personaccount/_design/checkdatesorting/_view/sortdatetimefunc?key={\"name:srini\",\"user:pup\"} 

Mes questions sont

que le tri se fera sur la clé et je le veux sur lastloggedin donc j'ai donné cela aussi dans la fonction d'émission.

Mais le nom de passe et l'utilisateur ne sont que des paramètres. Avons-nous besoin de passer tous les paramètres que nous lui donnons en clé? Tout d'abord, je veux vous transmettre la réponse, j'ai fait la même chose et je reçois des erreurs. S'il vous plaît aider

Pourriez-vous s'il vous plaît essayer sur votre PC, l'affichage iam toutes les commandes:

curl -X PUT http://uta:[email protected]:5984/person-data 

curl -X PUT http://uta:[email protected]:5984/person-data/srini -d '{"Name":"SRINI", "Idnum":"383896", "Format":"NTSC", "Studio":"Disney", "Year":"2009", "Rating":"PG", "lastTimeOfCall": "2012-02-08T19:44:37+0100"}' 

curl -X PUT http://uta:[email protected]:5984/person-data/raju -d '{"Name":"RAJU", "Idnum":"456787", "Format":"FAT", "Studio":"VFX", "Year":"2010", "Rating":"PG", "lastTimeOfCall": "2012-02-08T19:50:37+0100"}' 

curl -X PUT http://uta:[email protected]:5984/person-data/vihar -d '{"Name":"BALA", "Idnum":"567876", "Format":"FAT32", "Studio":"YELL", "Year":"2011", "Rating":"PG", "lastTimeOfCall": "2012-02-08T19:55:37+0100"}' 

Voici la vue que vous avez dit que j'ai créé:

{ 
    "_id": "_design/persondestwo", 
    "_rev": "1-0d3b4857b8e6c9e47cc9af771c433571", 
    "language": "javascript", 
    "views": { 
     "personviewtwo": { 
      "map": "function (doc) {\u000a emit([ doc.Name, doc.Idnum, doc.lastTimeOfCall ], null);\u000a}" 
     } 
    } 
} 


I have fired this command from curl command : 

curl -X GET http://uta:[email protected]:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=["SRINI","383896"]&endkey=["SRINI","383896",{}]descending=true&include_docs=true 

Je suis arrivé cette erreur:

[4] 3000 
curl: (3) [globbing] error: bad range specification after pos 99 
[5] 1776 
[6] 2736 
[3] Done     descending=true 
[4] Done(3)     curl -X GET http://uta:[email protected]:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=["SRINI","383896"] 
[5] Done     endkey=["SRINI","383896"] 

Je ne sais pas ce qu'est cette erreur.

J'ai aussi essayé passer les paramètres de la manière ci-dessous et n'aider

curl -X GET http://uta:[email protected]:5984/person-data/_design/persondestwo/_view/personviewtwo?key={\"Name\":\"SRINI\",\"Idnum\": \"383896\"}&descending=true 

mais je reçois différentes erreurs sur des séquences d'échappement

Je veux juste Dans l'ensemble cette requête soit satisfaite par la vue :

select * from person-data where Name="SRINI" and Idnum="383896" orderby lastTimeOfCall 

Ma préoccupation est de savoir comment passer les multiples paramètres de commande curl que je reçois beaucoup d'erreurs si je fais la manière ci-dessus.

Répondre

1

Tout d'abord, vous devez utiliser un tableau comme clé. J'utiliserais:

function (doc) { 
    emit([ doc.name, doc.user, doc.lastLoggedIn ], null); 
} 

Ceci produit fondamentalement tous les documents dans l'ordre par nom, puis utilisateur, puis lastLoggedIn. Vous pouvez utiliser l'URL suivante pour interroger.

/_design/checkdatesorting/_view/sortdatetimefunc?startkey=["srini","pup"]&endkey=["srini","pup",{}]&include_docs=true 

Deuxièmement, notez que je ne l'ai pas sortie doc que la valeur de votre requête. Cela prend beaucoup plus d'espace disque, surtout si vos documents sont assez volumineux. Il suffit d'utiliser include_docs=true.

Enfin, référez-vous au CouchDB Wiki, c'est très utile.

+0

Salut Dominic, Tout d'abord je veux transmettre grâce à vous pour la réponse, je l'ai fait la même chose et j'obtenir des erreurs – user1242003

1

Je viens de trébucher sur cette question. Les erreurs que vous obtenez sont causées par ne pas échapper à cette commande:

curl -X GET http://uta:[email protected]:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=["SRINI","383896"]&endkey=["SRINI","383896",{}]descending=true&include_docs=true 

Le caractère & a une signification particulière sur la ligne de commande et doit être échappé lorsqu'une partie d'un paramètre réel. Donc, vous devriez mettre des guillemets autour de la grande URL, et échapper aux citations à l'intérieur:

curl -X GET "http://uta:[email protected]:5984/person-data/_design/persondestwo/_view/personviewtwo?startkey=[\"SRINI\",\"383896\"]&endkey=[\"SRINI\",\"383896\",{}]descending=true&include_docs=true"