我需要一个随机查询,但我不知道在视图中执行此操作的最佳方法是什么。
答案 0 :(得分:8)
我在视图键中使用了Math.random()。但你必须明白它是确定性的,所以你不能在你的应用程序中使用它来随机化(只是为了抽样数据或拆分数据库。)
答案 1 :(得分:7)
基本策略是:
在文档中存储随机值
{ "_id": "7a36b03f3f2899064a1db5e0a6004204",
"random": 0.875111079382808
}
您可以在存储文档时计算random
,也可以使用_update
函数为其添加。
使用该值键入视图,有效地改变它们。
{ "_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);
}
}
}
}
}
在查询时选择一个随机数,例如0.4521,并获得/db/_design/myapp/_view/random_docs?limit=1&startkey=0.4521
。
您有可能(1 / total_rows)选择一个大于视图中任意值的随机数。因此,如果你需要防弹,你应该重新运行查询,如果你得到0行。