2017-05-06 78 views
-1
{"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"} 

这是我的数据库中的一个示例,我想选择一个随机重播。如何从我的nedb数据库获得一条随机记录

+2

我怀疑downvotes是因为你没有显示你试过的东西以及你遇到问题的地方。查看https://stackoverflow.com/help/how-to-ask以避免将来出现这种情况。 – tavnab

回答

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这样的东西,我认为这是唯一的选择。

+0

谢谢你,这是非常有帮助的家伙 –

相关问题