【发布时间】:2011-09-25 03:32:09
【问题描述】:
我对返回重复结果的集合 db.users.find() 进行了查询。例如 user._id "1" 可以重复多次。
有没有办法返回不同的结果?
【问题讨论】:
-
您可以添加您尝试过的示例查询吗?
标签: mongodb
我对返回重复结果的集合 db.users.find() 进行了查询。例如 user._id "1" 可以重复多次。
有没有办法返回不同的结果?
【问题讨论】:
标签: mongodb
如果您只想要所有不同的 user._id,请使用 db.users.distinct("_id")
如果您想要具有不同 _id 的整个记录,您必须考虑在具有相同 user._id 的 2 条记录之间进行选择的策略 您可以使用 group 或 map reduce,但您必须考虑,当有 2 个具有相同 _id 的用户时,我想要什么。
顺便说一句,_id 通常由 mongodb 生成,并且应该是唯一的。如果您有 2 个相同的 id,或者您的集合中的插入率非常高,或者您自己生成 _id。 您生成非唯一 _id 是否有任何特殊原因?
【讨论】:
单个find 永远不应该返回重复的结果,因为在 Mongo 中没有连接这样的东西,所以不会出现单个文档会被查询返回两次的情况。所以你所描述的听起来不应该发生 - 但如果没有更多细节就很难说。
但是,一种可能性是 find 返回一个打开的游标,因此,例如,如果您正在遍历大量文档并随时更新它们,您可能会在稍后再次获得相同的文档.这样做的原因是您的更新可能会增加文档的大小,使其不再适合它所拥有的空间,因此必须在集合结束时重新分配空间,稍后它会再次被光标。如果您正在这样做,您可能需要考虑以不同的方式进行更新。
【讨论】: