Mongo-查找随机文件

时间:2018-10-04 16:40:51

标签: mongodb

我与用户有一个收藏集。我想找到一个随机收藏,除了我的。

db.mycoll.aggregate([{ $sample: { size: 1 } }])

这可以退回我的文档。

User.aggregate([
 { $match: { _id: { $nin: myID } } },
 { $sample: { size: 1 } }
])

对于一个非常大的收藏集,这样有效吗?

1 个答案:

答案 0 :(得分:1)

查看聚合管道的各个阶段:

{ $match: { _id: { $nin: myID } } } 

Pipeline Sequence Optimization

这将使用_id上的内置索引。

{ $sample: { size: 1 } }

这将从$ match阶段的结果中选择一个样本记录。

如果不是很大的myID数组,这将是有效的。

注:不等式运算符$ nin选择性不高,因为它通常与索引的很大一部分匹配。结果,在很多情况下,带有索引的$ nin查询的性能可能不如必须扫描集合中所有文档的$ nin查询