Node.js 重命名集合与更新集合

Node.js 重命名集合与更新集合,node.js,mongodb,mongoskin,Node.js,Mongodb,Mongoskin,我有一个mongo DB,我需要每天更新(删除不相关的文档并添加新文档)。 DB没有分片 我从一个不太容易使用的外部数据主机获取数据 有两种选择: 1.将整个数据库(不是那么大)重新压缩到临时集合中,然后将其重命名为旧集合名称(dropTarget设置为true) 2.我自己做这项艰苦的工作,删除旧的实体,从数据主文件中找出哪些新文档是相关的,并将它们插入数据库 方案1显然是可取的,但其影响是什么?我在一个小时后进行维护,但我不希望用户在重命名过程中查询数据库时出错 使用重命名覆盖集合是完成任务

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

我从一个不太容易使用的外部数据主机获取数据

有两种选择: 1.将整个数据库(不是那么大)重新压缩到临时集合中,然后将其重命名为旧集合名称(dropTarget设置为true) 2.我自己做这项艰苦的工作,删除旧的实体,从数据主文件中找出哪些新文档是相关的,并将它们插入数据库

方案1显然是可取的,但其影响是什么?我在一个小时后进行维护,但我不希望用户在重命名过程中查询数据库时出错

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

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


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

Hi,感谢您的快速回复,您能详细说明一下为什么不在生产中使用重命名吗?我澄清了我的答案,并添加了一些示例,以支持反对在生产中重命名集合的意见。