重命名集合与更新集合



我有一个mongo数据库,我需要每天更新(删除不相关的文档并添加新文档)。DB没有被分片。

我从一个不太容易处理的外部数据主机中获取数据。

有两个选项:1.将整个DB(不是很大)重新构造为临时集合,然后将其重命名为旧集合名称(dropTarget设置为true)2.自己做艰苦的工作,删除旧的条目,从数据主机中找出哪些新文档是相关的,并将它们插入DB

选项1显然是可取的,但影响是什么?我在晚些时候进行维护,但我不希望用户在重命名过程中查询DB时出错。

使用重命名覆盖集合是完成任务的标准方式吗?还是我滥用API?:)

根据文档renameCollection在操作期间阻止所有数据库活动。如果用户设置了足够长的超时时间,他们将不会直接受到此重命名操作的影响,但是,由于数据集可能会在他们脚下发生变化,因此可能会产生副作用。例如,重命名集合可能会使打开的游标无效,从而中断当前返回数据的查询。

关于生产中集合的重命名,我个人会尽可能避免这样做,首先是因为上面的游标问题,但更重要的是,不完整的renameCollection操作可能会使目标集合处于不可用状态,并需要手动干预来清理。相反,我会使用updateupsert:true,它会覆盖整个文档,或者在不存在的情况下插入新记录。

最新更新