Random 按兰德订购-我在CouchDB怎么办?
我需要一个随机查询,但我不知道在视图中执行此操作的最佳方法是什么。基本策略是:Random 按兰德订购-我在CouchDB怎么办?,random,couchdb,Random,Couchdb,我需要一个随机查询,但我不知道在视图中执行此操作的最佳方法是什么。基本策略是: 在文档中存储一个随机值 { "_id": "7a36b03f3f2899064a1db5e0a6004204", "random": 0.875111079382808 } 您可以在存储文档时计算random,也可以使用\u update函数为您添加文档 将视图设置为该值的关键帧,有效地将其洗牌 { "_id": "_design/myapp", "comment": "Function left nake
{ "_id": "7a36b03f3f2899064a1db5e0a6004204",
"random": 0.875111079382808
}
您可以在存储文档时计算random
,也可以使用\u 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);
}
}
}
}
}
/db/\u design/myapp/\u view/random\u docs?limit=1&startkey=0.4521
有可能(1/total_行)您选择的随机数大于视图中的任意数。因此,如果需要防弹,如果得到0行,应该重新运行查询。我已经在视图键中使用了Math.random()。但是你必须明白它是确定性的,所以你不能在你的应用程序中使用它作为随机性(仅用于采样数据或分割数据库)。也许一个改进是发出
doc.\u rev.match(/^\d+-(\w+)$/)[1]
,即修订属性的校验和部分?也许,还要使用endkey参数,以避免重新运行查询。