我在视图键中使用了Math.random().但你必须明白它是确定性的,所以你不能在你的应用程序中使用它来随机化(只是为了采样数据或拆分数据库).
一个基本策略是:
在文档中存储随机值
{ "_id": "7a36b03f3f2899064a1db5e0a6004204",
"random": 0.875111079382808
}
Run Code Online (Sandbox Code Playgroud)
您可以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);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)在查询时选择一个随机数,例如0.4521和GET /db/_design/myapp/_view/random_docs?limit=1&startkey=0.4521.
您有可能(1/total_rows)选择一个大于视图中任意值的随机数.因此,如果您需要防弹,如果您获得0行,则应重新运行查询.