兰德订购 - 我怎么能在CouchDB中做?

时间:2010-05-09 21:33:11

标签: random couchdb

我需要一个随机查询,但我不知道在视图中执行此操作的最佳方法是什么。

2 个答案:

答案 0 :(得分:8)

我在视图键中使用了Math.random()。但你必须明白它是确定性的,所以你不能在你的应用程序中使用它来随机化(只是为了抽样数据或拆分数据库。)

答案 1 :(得分:7)

基本策略是:

  1. 在文档中存储随机值

    { "_id": "7a36b03f3f2899064a1db5e0a6004204",
      "random": 0.875111079382808
    }
    

    您可以在存储文档时计算random,也可以使用_update函数为其添加。

  2. 使用该值键入视图,有效地改变它们。

    { "_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);
            }
          }
        }
      }
    }
    
  3. 在查询时选择一个随机数,例如0.4521,并获得/db/_design/myapp/_view/random_docs?limit=1&startkey=0.4521

  4. 您有可能(1 / total_rows)选择一个大于视图中任意值的随机数。因此,如果你需要防弹,你应该重新运行查询,如果你得到0行。