【问题标题】:Distinct results in db.collection.find() querydb.collection.find() 查询中的不同结果
【发布时间】:2011-09-25 03:32:09
【问题描述】:

我对返回重复结果的集合 db.users.find() 进行了查询。例如 user._id "1" 可以重复多次。

有没有办法返回不同的结果?

【问题讨论】:

  • 您可以添加您尝试过的示例查询吗?

标签: mongodb


【解决方案1】:

如果您只想要所有不同的 user._id,请使用 db.users.distinct("_id")

如果您想要具有不同 _id 的整个记录​​,您必须考虑在具有相同 user._id 的 2 条记录之间进行选择的策略 您可以使用 group 或 map reduce,但您必须考虑,当有 2 个具有相同 _id 的用户时,我想要什么。

顺便说一句,_id 通常由 mongodb 生成,并且应该是唯一的。如果您有 2 个相同的 id,或者您的集合中的插入率非常高,或者您自己生成 _id。 您生成非唯一 _id 是否有任何特殊原因?

【讨论】:

【解决方案2】:

单个find 永远不应该返回重复的结果,因为在 Mongo 中没有连接这样的东西,所以不会出现单个文档会被查询返回两次的情况。所以你所描述的听起来不应该发生 - 但如果没有更多细节就很难说。

但是,一种可能性是 find 返回一个打开的游标,因此,例如,如果您正在遍历大量文档并随时更新它们,您可能会在稍后再次获得相同的文档.这样做的原因是您的更新可能会增加文档的大小,使其不再适合它所拥有的空间,因此必须在集合结束时重新分配空间,稍后它会再次被光标。如果您正在这样做,您可能需要考虑以不同的方式进行更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2013-09-07
    • 2011-11-08
    相关资源
    最近更新 更多