4

我正在使用MongoDB我的数据库,并且作为第一次后端开发人员,我可以轻松删除整个数据库/集合真的让我很困扰。

只需键入即可db.collection.remove()删除该集合中的所有记录!

我知道一个有效的备份策略应该不会导致这个问题,但我偶尔在一些集合上运行.remove(),我不想意外输入错误的集合名称,并且 (a) 必须通过备份恢复, (b) 丢失我在备份和恢复之间收集的所有数据,尤其是当我的应用程序收集了大量用户数据时。

是否有任何“保障”我可以设置我的数据库使用,即使它只是一个警告/确认说

"Yo, are you sure you want to remove everything from <collectionname>?选择:Yes/No"

4

2 回答 2

4

用户角色不会解决您的问题。如果您的帐户有权删除一位用户,您可能会不小心将其全部删除。如果您的帐户有权更新一位用户的属性,您可能会意外更新所有用户。

然而,有一个简单的解决方法。

步骤 0:备份您的数据库。并定期测试您的备份。并确保在备份未运行或出错时收到警报。副本集不是备份。我知道这很明显,但显然这对每个人来说都不是显而易见的。

第 1 步:为您的数据库编写一个Web 管理GUI 界面。这只需要一两天的时间 - 它应该足够简单,以至于秘书或实习生可以使用它而不必担心您的数据。(如果您认为这需要很长时间,请找一个花里胡哨的框架。您的管理控制台甚至不需要用与您的应用程序相同的语言编写。)

第 2 步:数据迁移(数据库的维护转换)应始终从检查到源代码控制的脚本运行,并事先在非产品上进行测试。该脚本可以像 一样简单mongo -e "foo.update(blah)",但您应该将其作为脚本运行以避免剪切-粘贴错误。理想情况下,您甚至会有所有迁移的清单。(检查你是否有最近的备份。事先检查数据库日志和系统负载。写一个前后查询,告诉你迁移是否成功......)

第 3 步:您现在不再需要使用生产 Mongo 控制台。所以不要。它是一个有用的开发工具,但仅在本地开发数据库上才需要。

上述角色可能对只读查询有用。但是您已经可以针对非主副本集成员执行此操作。

tl;dr:你可以使用牛仔管理技术走得很远,但最终你会发现自动化一切会更好(而且工作不多)。

于 2013-07-27T03:43:12.030 回答
2

在当前版本中您无法提供此功能。

在将来的版本中,当用户定义的角色可用时,您可以定义一个允许 insert() 和 update() 但不允许 remove() 或 drop() 等的角色,从而使自己以不同的更高角色用户身份登录,但这在当前(2.4)版本中不可用。

于 2013-07-27T02:17:21.557 回答