gpt4 book ai didi

mongodb - 随机排序

转载 作者:IT老高 更新时间:2023-10-28 13:13:47 33 4
gpt4 key购买 nike

关于如何从集合中获取随机文档的问题已经被问过很多次,并且有关于这个话题的建议。

我需要的是从集合中获取几个随机文档,更糟糕的是 - 这些文档必须符合某些标准(我的意思是经过过滤)。例如,我有一组文章,其中每篇文章都有一个“主题”字段。用户选择一个他感兴趣的主题,我的数据库必须以随机顺序每次显示相应的文章。

显然,之前讨论的 hack 对我没有帮助。实现我想要的唯一方法是查询相应的主题获取 id:

var arr = db.articles.find({topic: 3}, {_id:1}).toArray();

然后根据接收到的文档数量生成随机数字序列,然后使用随机数作为该数组的索引从数组中获取文档 id,最后向 mongodb 发出另一个请求以获取具有这些随机选择的 id 的文档。

如您所见,这似乎有点太慢了,特别是如果第一次查询返回的文章太多:)

所以我认为可能有一些 mongodb 命令根据它们在索引中的位置通过索引键获取文档。关键是我可以像这样创建覆盖的复合索引:

db.articles.ensureIndex({topic: 1, _id:1});

现在我的查询只需要扫描索引中右 _ids 的连续行。如果我可以通过那些“_ids”位置从集合中请求文档,那么我可以在一个请求中完成整个事情!比如:

var cursor = db.articles.find({topic:3, $indexKeyPosition: {$in: myRandomSequence}});

有人知道这些功能吗?

最佳答案

现在,您应该可以使用 $sample聚合函数。

示例(未经测试):

db.articles.aggregate([
{ $match : { topic : 3 } },
{ $sample : { size: 3 } }
])

但是请注意,它可能会多次返回同一个文档。

关于mongodb - 随机排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13910751/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com