Nodejs 导出mongodb且以当前时间命名导出文件
Nodejs 导出mongodb且以当前时间命名导出文件
mongoexport -d test -c users -o mongo_$(date+%F).json
导出后为啥我的文件名直接就叫做mongo_$(date+%F).json了?说好的当前时间呢?说好的幸福呢?
2 回复
要实现使用 Node.js 导出 MongoDB 数据并将文件以当前时间命名,我们需要使用 Node.js 的一些内置库以及 MongoDB 的官方驱动程序。以下是具体步骤和示例代码。
步骤
-
安装必要的库:
mongodb
:用于连接和操作 MongoDB。moment
:用于格式化日期(可选)。
-
编写脚本:
- 连接到 MongoDB。
- 执行导出操作。
- 将文件以当前时间命名并保存到指定目录。
示例代码
const { MongoClient } = require('mongodb');
const moment = require('moment'); // 如果需要更复杂的日期格式,可以使用 moment
// 连接字符串和数据库名称
const uri = "mongodb://localhost:27017";
const dbName = "test";
// 定义导出的集合和输出文件路径
const collectionName = 'users';
const outputDirectory = './exports/';
// 获取当前时间并格式化为 YYYY-MM-DD
const now = moment().format('YYYY-MM-DD');
// 构建输出文件路径
const outputFilePath = `${outputDirectory}mongo_${now}.json`;
async function exportData() {
try {
// 连接到 MongoDB
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
await client.connect();
console.log("Connected to MongoDB");
const db = client.db(dbName);
const collection = db.collection(collectionName);
// 导出数据
const data = await collection.find({}).toArray();
// 将数据写入文件
require('fs').writeFileSync(outputFilePath, JSON.stringify(data, null, 2));
console.log(`Data exported to ${outputFilePath}`);
// 关闭连接
client.close();
} catch (error) {
console.error("Error exporting data:", error);
}
}
exportData();
解释
- 连接 MongoDB:我们使用
MongoClient
连接到本地 MongoDB 实例。 - 获取当前时间:使用
moment
库格式化当前时间(你可以选择使用原生 JavaScript 的Date
对象)。 - 构建文件路径:将文件路径构建为
./exports/mongo_YYYY-MM-DD.json
。 - 导出数据:查询集合中的所有文档,并将其转换为 JSON 字符串。
- 写入文件:使用
fs.writeFileSync
将数据写入指定文件路径。
注意事项
- 确保 MongoDB 服务正在运行。
- 根据实际情况调整 MongoDB 的连接 URI 和数据库名称。
- 如果不需要复杂的日期格式,可以直接使用
new Date().toISOString()
替换moment
。
这样,你就可以使用 Node.js 脚本定期导出 MongoDB 数据,并将文件以当前时间命名。
根据你的描述,你在尝试使用 mongoexport
命令行工具来导出 MongoDB 数据,并希望文件名包含当前时间。但是,命令中的变量没有正确解析。
如果你希望通过 Node.js 实现这一点,可以使用 mongodb
和 fs
模块来实现。以下是一个简单的示例代码:
const { MongoClient } = require('mongodb');
const fs = require('fs');
const path = require('path');
async function exportCollection() {
const client = new MongoClient('mongodb://localhost:27017', { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
const db = client.db('test');
const collection = db.collection('users');
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
const filename = `mongo_${timestamp}.json`;
const filePath = path.join(__dirname, filename);
const data = await collection.find({}).toArray();
fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
console.log(`Data exported to ${filePath}`);
} catch (err) {
console.error(err);
} finally {
await client.close();
}
}
exportCollection();
解释:
- MongoDB 连接:使用
MongoClient
连接到本地 MongoDB 服务器。 - 生成文件名:使用
new Date().toISOString()
获取当前时间,并替换掉冒号和点,以避免文件名中出现非法字符。 - 读取数据:从
users
集合中读取所有文档。 - 写入文件:将数据写入到以当前时间命名的 JSON 文件中。
这样,每次运行脚本时,都会生成一个带有当前时间戳的 JSON 文件,而不仅仅是固定的字符串。