我与用户有一个收藏集。我想找到一个随机收藏,除了我的。
db.mycoll.aggregate([{ $sample: { size: 1 } }])
这可以退回我的文档。
User.aggregate([
{ $match: { _id: { $nin: myID } } },
{ $sample: { size: 1 } }
])
对于一个非常大的收藏集,这样有效吗?
答案 0 :(得分:1)
查看聚合管道的各个阶段:
{ $match: { _id: { $nin: myID } } }
Pipeline Sequence Optimization
这将使用_id上的内置索引。
{ $sample: { size: 1 } }
这将从$ match阶段的结果中选择一个样本记录。
如果不是很大的myID数组,这将是有效的。
注:不等式运算符$ nin选择性不高,因为它通常与索引的很大一部分匹配。结果,在很多情况下,带有索引的$ nin查询的性能可能不如必须扫描集合中所有文档的$ nin查询