【问题标题】:how to get a random record from my nedb database [closed]如何从我的 nedb 数据库中获取随机记录 [关闭]
【发布时间】:2017-10-05 03:42:22
【问题描述】:
{"message":"hi","replay":"hello","messageFrom":253505936,"_id":"RFxx2j5jiHfvT7F8"}
{"message":"what is your name","replay":"kokokoko","messageFrom":322078970,"_id":"49leUECRRWrWdVc1"}
{"message":"no why","replay":"don't ask me","messageFrom":322078970,"_id":"7bb8DXqYTsPwq12n"}
{"message":"thank you","replay":"you'r welcome","messageFrom":200826832,"_id":"KrgmVquPDyqM6o7Z"}

这是我的数据库中的一个样本,我想选择一个随机回放。

【问题讨论】:

  • 我怀疑投反对票是因为您没有展示您尝试过的内容以及遇到问题的地方。查看stackoverflow.com/help/how-to-ask 以避免将来发生这种情况。

标签: javascript database nedb


【解决方案1】:

虽然不是最有效的解决方案,但您可以这样做:

db.count({}, function (err, count) {
  if (!err && count > 0) {
    // count is the number of docs

    // skip a random number between 0 to count-1
    var skipCount = Math.floor(Math.random() * count);

    db.find({}).skip(skipCount).limit(1).exec(function (err2, docs) {
      if (!err2) {
        // docs[0] is your random doc
      }
    });
  }
});

灵感来自a similar approach for MongoDB

请注意,此解决方案会遇到与上述相同的一些问题;也就是说,它不是很有效,并且如果记录数在获得对.count() 的响应和获得对.exec() 的响应之间发生了变化,就会出现竞争条件。但是,在 NeDB 支持 $sample aggregation 之类的东西之前,我认为这是唯一的选择。

【讨论】:

  • 谢谢你,这很有帮助
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2014-06-01
  • 2018-07-20
  • 2011-01-27
  • 2011-04-07
  • 1970-01-01
相关资源
最近更新 更多