python - 对 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 索引?
有我不知道的预定义方法吗?
解决方案
我如何有效地更新每个 _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
推荐阅读
- apache-spark - 错误执行程序:阶段 1.0 中任务 52.0 中的异常 (TID 200)
- nosql - 重命名文档密钥 Arango DB
- machine-learning - RDF 存储上的机器学习以检测模式
- php - 在 JMS 序列化程序中混合访问器和 SkipWhenEmpty
- python - 如何使用 Python 从容器内的文本中刮取 Td
- openstreetmap - 有没有办法在 OSRM 服务器中使用从 openstreetmap 导出的地图图块?
- wordpress - WooCommerce REST API 通过电话号码获取客户
- c++ - 虚函数覆盖是否违反 LSP?
- c# - 如何在 Tfs 的 TeamProject 中创建 Git 存储库?
- flutter - 如何在 FutureBuilder 项目的 Flutter ListView 中向上滚动时修复“跳到每个项目的顶部”?