作者回复: 4.2可以做到:
db.test.insert({a: 2, b: 3})
db.test.updateMany({}, [{
$set: {
c: {
$add: ["$a", "$b"]
}
}
}])
作者回复: 不会加lock。所以mongodump出来的不是一个一致的backup。通常可以加上 --oplog参数来获取一个某个时间点的快照类的备份。
作者回复: 如果可以停服务,可以用 mongodump -d xxx 方式
如果不能停服,需要用一些工具:
如果在阿里云,可以考虑mongoshake 工具
MongoDB官方有mongomirror工具
我们Tapdata也有一个工具,有免费3个月的使用期,如果只是一次性迁移够用了。
作者回复: 可以去问Eliot Horowitz... 程序员的惰性吧,写原型的时候谁都不喜欢折腾安全性的东西,麻烦。
作者回复: 备份不阻塞,除非你用fsyncLock()。
不上锁的话,就用 --oplog
作者回复: 好的谢谢提醒。
作者回复: 有一些值得注意的地方
1) schema 管理会复杂, 你不能一下确定这个集合到底是什么结构。解决方案是使用Schema Validation 或者 JSON Schema来定义这个集合的严格结构。 JSON Schema类似于关系数据库的schema,但是不同的是如果你需要修改这个schema的话可以随时更改,理论上也不需要对已有数据做更新或者迁移。
作者回复: 我用的2.7,但是理论上Python 3也是okay的。
作者回复: mongodb 不能这么玩,只能用mongodump 或者 mongoexport,或者用迁移工具。
作者回复: 这个没有绝对值,通常和文档大小有关。如果在1KB以内的话,我会推荐用1000左右的batch size
作者回复: 换一个思路。使用MongoDB Ops Manager可以实现任意时间点恢复 - 比如你3:00执行删除动作,4:00发现有问题想回滚,那么可以使用ops manager 把数据库回到3:00的时候。
类似的事情可以用命令行方式做,但是就不是小项目了。
反向生成insert的没有见过,但是自己实现应该很简单。
作者回复: Python 语言最接近英语,也最合适演示。我可以考虑加入一些适当的Java示例在后续章节中。
作者回复: 这个没有在计划内哦,受众可能不够大。