使用节点将整个 mongo 数据库的内容(每个集合的内容)写入 JSON 文件?

Write the contents of the whole mongo database (contents of every collection) into JSON file using node?

如上所述,尝试为我的节点应用程序获取一个简单的备份功能,我想找到一种方法将我数据库中每个集合的内容写入一个大 JSON 文件并将其存储在服务器端。可能吗?

我正在使用 node 和 express 的 mongoose。

你试过mongodump了吗?您只需输入:

mongodump

然后它将所有数据库备份到您 运行 所在目录的 dump 文件夹中。然后您可以使用 mongorestore 恢复它。有关详细信息,请参阅 MongoDB 文档的 backup with mongodump 部分。

Node 到 运行,您只需从 Node 文件调用 mongodump。如果这是我的 main.js 文件:

// main.js
const { exec } = require("child_process");

exec("mongodump", (error, stdout, stderr) => {
    if (error) {
        console.log(`error: ${error.message}`);
        return;
    }
    if (stderr) {
        console.log(`stderr: ${stderr}`);
        return;
    }
    console.log(`stdout: ${stdout}`);
});

那我可以运行:

node main.js

它会在我 运行 命令所在的任何目录中生成一个 dump 文件夹,其中包含我的所有数据库。

这是我机器上的 gif 图像:

Joe Drumgoole 的评论中提到的另一个选项是 mongoexport,它将以人类可读的格式为您提供输出。因此,如果您想要 todo-api 数据库中 users 集合中的所有文档,您可以使用此命令:

mongoexport -v -d todo-api -c users -o 'todo.backup.json' --pretty

这将在 todo-api 数据库的 users 集合的 todo.backup.json 处生成一个 JSON 文件。

这是我机器上的样子:

如果你需要从 MongoDB Atlas Cluster 中提取数据,这里是他们提供的文档(注意这里的一些信息与我的数据库相关,你需要使用你自己的数据) :

数据导入导出工具

将 PASSWORD 替换为管理员用户的密码,将 DATABASE 替换为您希望 import/export 到集群的数据库的名称,并将 COLLECTION 替换为您想要的集合的名称import/export 到您的集群。将 FILETYPE 替换为 json 或 csv 以指定文件类型。在适用的情况下,将 FILENAME 替换为输出文件(用于导出)或数据源(用于导入)的位置和名称。 注意:导出或导入 CSV 数据时,通常需要额外的 --fields 标志。有关其他详细信息,请参阅特定工具的文档。

mongoexport |生成存储在 MongoDB 实例中的数据的 JSON 或 CSV 导出

以下是在实际 Atlas Culsters 页面上可以在哪里找到该信息的一些屏幕截图:

mongoexport --host Atlas-Free-Cluster-shard-0/atlas-free-cluster-shard-00-00-czaoo.mongodb.net:27017,atlas-free-cluster-shard-00-01-czaoo.mongodb.net:27017,atlas-free-cluster-shard-00-02-czaoo.mongodb.net:27017 --ssl --username taskapp --password <PASSWORD> --authenticationDatabase admin --db <DATABASE> --collection <COLLECTION> --type <FILETYPE> --out <FILENAME>