You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 18:57:01