为什么本地MongoDB插入数据后指定的data文件夹仍为空?
问题描述
我按照npm MongoDB官网的手册操作,在项目目录中创建了data文件夹,执行mongod --dbpath=/data命令指定数据库目录,随后运行以下app.js文件:
const { MongoClient } = require('mongodb'); // Connection URL const url = 'mongodb://localhost:27017'; const client = new MongoClient(url); // Database Name const dbName = 'myProject'; async function main() { // Use connect method to connect to the server await client.connect(); console.log('Connected successfully to server'); const db = client.db(dbName); const collection = db.collection('documents'); const insertResult = await collection.insertMany([{ a: 1 }, { a: 2 }, { a: 3 }]); console.log('Inserted documents =>', insertResult); // the following code examples can be pasted here... return 'done.'; } main() .then(console.log) .catch(console.error) .finally(() => client.close());
程序显示插入成功,但指定的data文件夹依然完全为空,请问这是什么原因?
原因分析与解决办法
路径指向错误
你执行的mongod --dbpath=/data中,/data是系统根目录下的data文件夹,并非你项目目录里创建的那个。如果要指定项目内的data目录,在项目根目录执行命令时,应该用相对路径:mongod --dbpath=./data,或者直接写完整的绝对路径(比如/Users/xxx/your-project-folder/data)。MongoDB延迟写入机制
MongoDB默认采用延迟写入策略,不会立刻把内存中的数据刷到磁盘。可以在插入操作后,添加代码强制刷新:await db.adminCommand({ fsync: 1 });或者正常关闭mongod进程(用
Ctrl+C终止),此时MongoDB会自动将内存中的数据写入磁盘。确认mongod实际使用的目录
启动mongod时,控制台会输出包含dbpath的日志信息,检查该路径是否与你期望的项目data目录一致。如果不一致,说明命令中的路径有误,mongod可能使用了默认的存储目录(比如/data/db,若该目录存在)。
内容的提问来源于stack exchange,提问作者Circle
相关产品推荐
相关产品推荐

