能否在Mongo shell内部完成MongoDB数据库的恢复操作?
MongoDB 备份恢复非系统命令实现方案
原生Mongo Shell等效操作
你不需要退出当前Mongo Shell即可完成备份恢复,Shell内置的BSON序列化/反序列化能力+文件读写API,完全可以替代mongodump和mongorestore的核心功能:
- 单集合备份(等效
mongodump单集合导出)
// 导出指定集合数据为BSON文件 const data = db.your_collection.find({}).toArray() const serializedBson = bsonSerialize(data) fs.writeFileSync('/data/backup/your_collection.bson', serializedBson)
如需全库备份,遍历db.getCollectionNames()循环执行上述逻辑即可,需要保留索引的话额外备份db.system.indexes集合内容。
- 单集合恢复(等效
mongorestore单集合导入)
// 读取BSON文件写入目标集合 const rawBson = fs.readFileSync('/data/backup/your_collection.bson') const docs = bsonDeserialize(rawBson) db.your_collection.insertMany(docs, {ordered: false})
PyMongo端无进程调用实现
你不需要调用os.system()执行系统命令,配合PyMongo官方配套的bson模块即可直接实现:
- 备份示例
from pymongo import MongoClient import bson client = MongoClient("mongodb://127.0.0.1:27017") db = client.your_db # 导出单集合 docs = list(db.your_collection.find()) with open("your_collection.bson", "wb") as f: f.write(bson.encode_all(docs))
- 恢复示例
with open("your_collection.bson", "rb") as f: docs = bson.decode_all(f.read()) # ordered设为false可跳过已存在的重复文档不中断导入 db.your_collection.insert_many(docs, ordered=False)
RosProlog端适配方案
你不需要自己编写BSON解析器,RosProlog支持桥接Python执行逻辑,你可以把上述PyMongo的备份恢复逻辑封装为自定义Prolog谓词,直接在RosProlog中调用即可,无需使用process_create/3创建系统进程。
内容的提问来源于stack exchange,提问作者Jere
相关产品推荐
相关产品推荐

