如何从我的 nedb 数据库中获取随机记录
how to get a random record from my nedb database
{"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"}
这是我的数据库中的样本,我想选择一个随机重放。
虽然这不是最有效的解决方案,但您可以这样做:
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 之前,我认为这是唯一的选择。
{"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"}
这是我的数据库中的样本,我想选择一个随机重放。
虽然这不是最有效的解决方案,但您可以这样做:
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 之前,我认为这是唯一的选择。