在ID后对所有内容进行排序

时间:2019-01-25 09:40:15

标签: python mongodb pymongo

我有一个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索引?
有我不知道的预定义方法吗?

1 个答案:

答案 0 :(得分:1)

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

  

您不能。 “ _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