代码之家  ›  专栏  ›  技术社区  ›  tspentzas

Mongo-查找随机文档

  •  0
  • tspentzas  · 技术社区  · 6 年前

    我有一个用户收藏。我想随便找一个收藏品,除了我的。

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

    这可以归还我的文件。

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

    对于一个真正的大收藏来说这是有效的吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Atish    6 年前

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

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

    Pipeline Sequence Optimization

    这将使用\u id上的内置索引。

    { $sample: { size: 1 } }
    

    这将从$match stage的结果中选择一个示例记录。

    Note:The inequality 运算符$nin不是很有选择性,因为它经常匹配索引的很大一部分。因此,在许多情况下,带有索引的$nin查询的性能可能并不比必须扫描集合中所有文档的$nin查询好