J'ai besoin d'une requête aléatoire, mais je ne sais pas quelle est la meilleure façon de le faire dans la vue.Commander par Rand - Comment faire pour CouchDB?
Répondre
Je me suis débrouillé en utilisant Math.random() dans ma clé de vue. Mais vous devez comprendre que ce sera déterministe, donc vous ne pouvez pas l'utiliser pour le hasard dans votre application (juste pour des choses comme l'échantillonnage des données, ou la division d'une base de données.)
Une stratégie de base est:
magasin une valeur aléatoire dans le document
{ "_id": "7a36b03f3f2899064a1db5e0a6004204", "random": 0.875111079382808 }
Vous pouvez calculer
random
lorsque vous enregistrez le document ou utilisez une fonction_update
pour l'ajouter pour vous .Créez une vue saisie sur cette valeur, en la mélangeant efficacement.
{ "_id": "_design/myapp", "comment": "Function left naked for clarity; it should be a string", "views": { "random_docs": { "map": function(doc) { if(doc.random) { emit(doc.random, doc); } } } } }
Choisissez un nombre aléatoire au moment de la requête, par ex. 0,4521 et GET
/db/_design/myapp/_view/random_docs?limit=1&startkey=0.4521
.
Il y a une chance (1/total_rows) que vous choisissiez un nombre aléatoire supérieur à n'importe quel dans la vue. Donc, si vous devez être à l'épreuve des balles, vous devriez réexécuter la requête si vous obtenez 0 lignes.
Et peut-être, utilisez un paramètre endkey aussi, pour évitez de réexécuter la requête. –
Bon point. Merci! – JasonSmith
- 1. Comment commander une vue résultat par une valeur réduite? CouchDB
- 2. Vues CouchDB: supprimer les doublons * et * commander par temps
- 3. Puis-je commander des documents CouchDB par clé commune?
- 4. Comment commander par Rails?
- 5. Commande MySQL par rand() groupée par jour
- 6. complex sql commander par
- 7. Commander par en Linq
- 8. Linq to NHibernate, ordre par Rand()?
- 9. Comment commander par une partie d'une colonne?
- 10. requête limite magento + commande par rand()
- 11. Comment commander, groupe, commander avec mySQL
- 12. Comment puis-je commander par GenericForeignKey?
- 13. Commander par collection compter avec ICriteria & NHibernate
- 14. LIMIT puis RAND plutôt que RAND puis LIMIT
- 15. Recherche par clé dans Apache CouchDB
- 16. Base de données CouchDB par entité principale
- 17. Rails ORM pour CouchDB?
- 18. Bibliothèques C# pour CouchDB?
- 19. Comment commander boucle simpleXML
- 20. Comment commander une requête par champ traduit en utilisant globaliser
- 21. Comment fonctionne ORDER BY RAND() de MySQL?
- 22. Comment commander par une valeur d'identifiant connue dans mysql
- 23. Comment commander par collection à l'aide de linq?
- 24. Comment faire correspondre partiellement les ID dans CouchDB?
- 25. Comment faire l'équivalent SQL de "DISTINCT" dans CouchDB?
- 26. Comment ajouter "Commander par" lors du chargement d'un modèle Magento
- 27. SQL Server rand() agrégat
- 28. gcc implémentation de rand()
- 29. Rails: HOw pour commander une table par le modèle associé
- 30. Utilisation d'expressions Lambda pour commander une liste par date GMT
Peut-être une amélioration serait d'émettre 'doc._rev.match (/^\ d + - (\ w +) $ /) [1]', c'est-à-dire la partie checksum de la propriété de révision? – JasonSmith