【发布时间】:2011-02-17 11:04:30
【问题描述】:
我需要一个随机查询,但我不知道在视图中执行此操作的最佳方法是什么。
【问题讨论】:
我需要一个随机查询,但我不知道在视图中执行此操作的最佳方法是什么。
【问题讨论】:
我已经在我的视图键中使用 Math.random()。但是您必须了解它是确定性的,因此您不能将其用于应用程序中的随机性(仅用于采样数据或拆分数据库之类的事情。)
【讨论】:
doc._rev.match(/^\d+-(\w+)$/)[1],即修订属性的校验和部分?
基本策略是:
在文档中存储一个随机值
{ "_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 和 GET /db/_design/myapp/_view/random_docs?limit=1&startkey=0.4521。
您有机会 (1 / total_rows) 选择一个比视图中任何值都大的随机数。所以如果你需要防弹,如果你得到 0 行,你应该重新运行查询。
【讨论】: