我在多进程环境中使用MongoDB,我想知道如何按插入顺序对查询进行排序,并将其限制为在某个文档之后插入的文档.在单个进程中,我可以使用ObjectID,但是在同一秒中来自不同进程的两个ObjectId可能具有错误的顺序.
例:
ObjectId("5236dc5c 88ee6f 2075 bd0049")
Run Code Online (Sandbox Code Playgroud)
可能是由之前的流程2075生成的
ObjectId("5236dc5c 88ee6f 2071 f35fb8")
Run Code Online (Sandbox Code Playgroud)
通过过程2071.注意,两个ID的时间戳部分相等(5236dc5c).此时间戳以秒为单位.
3rf*_*3rf 11
使用ObjectIds或日期字段进行排序可能无法为您提供所需的结果.插入文档中的ObjectIds和日期是在客户端生成的,因此如果您使用来自多台计算机的连接运行,则会遇到排序不一致的情况,除非您的计算机之间的计时是完美的.
你能提供更多关于你想要做什么的细节吗?有几种不同的方法可以从MongoDB获得您想要的行为,具体取决于您需要在特定文档之后插入文档的列表.
例如,如果您尝试将该有序文档列表用作一种队列,则可以使用findAndModify命令获取未读文档并原子地更新"读取"字段以保证您不会读取它两次.每次调用findAndModify都会在集合中找到最新文档而不将read字段设置为true,将该字段原子设置为true,并将文档返回给客户端进行处理.
另一方面,如果您的用例确实需要插入顺序的文档列表,则可以利用插入文档的自然顺序.在MongoDB中,文档按插入顺序写入磁盘,除非文档大小或删除的更改需要移动.通过使用上限集合(保证自然顺序),您可以通过利用此功能获得文档列表.请注意,使用上限集合会有几个主要限制,您可以在文档中找到这些限制.
| 归档时间: |
|
| 查看次数: |
3620 次 |
| 最近记录: |