- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 MongoDB
作为我的数据库,并且作为新手后端开发人员,删除整个数据库/集合的轻松程度确实困扰着我。
只需输入 db.collection.remove()
从该集合中删除所有记录!
我知道一个有效的备份策略应该使这不是问题,但我偶尔确实运行.remove()
在某些集合上,我不想不小心输入错误的集合名称并且 (a) 必须进行备份恢复,并且 (b) 丢失我在备份和恢复之间收集的任何数据,尤其是作为我的应用程序收集了大量用户数据。
是否有任何我可以设置我的数据库使用的“保护措施”,即使它只是一个警告/确认说
"Yo, are you sure you want to remove everything from <collectionname>?
选择:Yes/No"
最佳答案
用户角色不会解决您的问题。如果您的帐户有权删除一个用户,您可能会不小心将他们全部删除。如果您的帐户有权为一个用户更新属性,您可能会不小心更新所有用户。
不过,有一个简单的修复方法。
第 0 步:备份您的数据库。并定期测试您的备份。并确保在备份未运行或出错时收到警报。副本集不是备份。我知道这很明显,但是 evidentally it's not obvious to everybody.
第 1 步:写一个 web admin数据库的 GUI 界面。这只需要一两天时间——而且它应该足够简单,秘书或实习生可以使用它而不必担心您的数据。 (如果您认为这需要很长时间,请找到一个具有更多功能的框架。您的管理控制台甚至不需要使用与您的应用程序相同的语言编写。)
第 2 步:数据迁移(数据库的维护转换)应始终从已 checkin 源代码控制的脚本运行,并事先在非生产环境中进行测试。该脚本可以像 mongo -e "foo.update(blah)"
一样简单,但您应该将其作为脚本运行以避免剪切粘贴错误。理想情况下,您甚至会有一个所有迁移的 list 。 (检查您是否有最近的备份。事先检查数据库日志和系统负载。写一个前后查询,告诉您迁移是否成功...)
第 3 步:您现在不再需要使用生产 Mongo 控制台。所以不要。它是一个有用的开发工具,但只有本地开发数据库才需要。
上述角色可能对只读查询有用。但是您已经可以针对非主副本集成员执行此操作。
tl;dr:您可以使用 cowboy admin techniques 走得很远,但最终您会发现将所有事情自动化会更好(而且不需要更多工作)。
关于MongoDB - 防范 .remove() 整个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893525/
我正在使用 MongoDB作为我的数据库,并且作为新手后端开发人员,删除整个数据库/集合的轻松程度确实困扰着我。 只需输入 db.collection.remove()从该集合中删除所有记录! 我知道
我在项目中使用 Require.js。如果您正在定义一个模块,变量 define 将被添加到全局命名空间。 最近我有一个变量名冲突[但奇怪的是,只在 Safari 中],因为有一个 ID 为 defi
我是一名优秀的程序员,十分优秀!