MongoDB:查询单个随机文档的最有效方法是什么?

时间:2011-11-09 18:00:01

标签: c++ mongodb

我需要随机选择一个集合中的文档(或者 - 来自随机定位的“窗口”的少量连续文档)。 我找到了两个解决方案: 1 2 。第一个是不可接受的,因为我预计收集量很大,并希望最小化文档大小。第二个似乎无效(我不确定skip操作的复杂性)。并且 here 可以提到查询具有指定索引的文档,但我不知道该怎么做(我正在使用C ++驱动程序)。

该问题还有其他解决方案吗?哪个效率最高?

2 个答案:

答案 0 :(得分:2)

似乎你可以在那里模拟解决方案1,(假设你的_id键是auto-inc值),然后只记录你的记录,并将其作为c ++中随机int的上限,然后抓住那一排。

同样,如果你没有autoinc _id键,只需用你的结果创建一个。拥有一个带INT的附加字段不应该对你的文档大小增加那么多。

如果你没有auto-inc字段,Mongo会谈到如何在这里快速添加一个:

Auto Inc Field.

答案 1 :(得分:2)

我有一次类似的问题。就我而言,我的文件上有一个日期属性。我知道数据集中可能的最早日期,所以在我的应用程序代码中,我会在EARLIEST_DATE_IN_SET和NOW范围内生成一个随机日期,然后使用日期属性上的GTE查询查询mongodb,并将其限制为1个结果。

随机日期很可能大于数据集中的最高日期,因此我在应用程序代码中考虑了这一点。

使用date属性的索引,这是一个超快查询。