首页 > 解决方案 > 对 id 后的所有内容进行排序

问题描述

我有一个 MongoDB 表,可以说十亿个条目。每个条目都有一个设置为 auto_increment 的数字索引。
有一天,我决定删除数据库中间的一些条目(参见_id:18)。

{ "_id" : 16, "email" : "LcZL4E43gd", "password" : "test", "lastseen" : 1548354920 }
{ "_id" : 17, "email" : "YQo4SKEslh", "password" : "test", "lastseen" : 1548354920 }
{ "_id" : 19, "email" : "tVlsT6yZxv", "password" : "test", "lastseen" : 1548354920 }
{ "_id" : 20, "email" : "xoMF4dt2Fn", "password" : "test", "lastseen" : 1548354920 }

所以现在计数器变为 16、17、19、20。但我的代码需要在一个空的失败获取请求处停止。所以它会停在表格的中间,因为缺少索引。
我如何有效地更新每个 _id 元素以匹配递增的 auto_increment 索引?
有我不知道的预定义方法吗?

标签: pythonmongodbpymongo

解决方案


我如何有效地更新每个 _id 元素以匹配递增的 auto_increment 索引?

你不能。'_id' 字段在 MongoDB 中是不可变的。一旦为它分配了值,就无法更改它。

如果您真的想做这样的事情(您不应该这样做),首先,您需要将顺序计数器移动到不同的字段(而不是 _id)。但是,请记住,正如您所提到的,如果您有 10 亿个文档并且您的第 18 个文档被删除,您是否希望所有其余文档(10 亿 - 18 个 !!!!!)都被更新?

建议: 最好重新定义您的 API 以接受序列中的“漏洞”(例如,如果 18 不存在,请继续)。但是,在不了解整个应用场景的情况下,很难有人提出建议。

_id可以在此处获得 有关字段的更多信息: https ://www.vividcortex.com/blog/what-is-mongodbs-_id-field-and-how-to-use-it


推荐阅读