MongoDB是目前非常热门的非关系型数据库。其中的数据格式为json,可以直接使用node进行读写,因此MongoDB在全栈开发中,受到很多人的青睐。MongoDB导入数据的方法主要有两种,一种为使用mongo shell的query将数据传入数据库;另一种为使用简单的javascript程序,连接至数据库并且进行导入。
首先我们需要启动本地的数据库连接
输入指令
mongod
接着打开mongo shell,在另一个terminal或cmd中输入
mongo
对应的,命令行中会出现
MongoDB shell version v4.0.6
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("80092a7b-2c07-4cd6-9fb0-b2f86938adb2") }
MongoDB server version: 4.0.6
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>
这时就可以输入相应的query了。如果不清楚mongo shell的问询语句的可以查阅官方的MongoDB Manual。
主要使用的几个指令为
use MyDatabase
将MyDatabase换为对应的数据库名称。
db.MyCollection.find()
将MyCollection换为将要使用的collection名称,查看当前collection中是否有记录。
db.MyCollection.insert(MyJSON)
将MyJSON换为即将导入的单个JSON,可以collection导入一条数据。
db.MyCollection.insertMany([MyJSON1, MyJSON2, ...])
将多个MyJSON换为即将导入的多个JSON,可以同时向collection同时导入多条记录。
由于该接口的语法相对固定,如果想要导入的JSON比较多,我们可能需要使用其他编程语言如Java或Python生成文本,将文本粘贴在mongo shell中。
如使用python
for i in range(100):
print('db.MyCollection.insert({})'.format(records[i]))
这种其他语言生成文本,粘贴在mongo shell的方法也使用与其他query的导入,如findOneAndUpdate
, findOneAndRemove
等。但是它的局限性在于,如果我们有一个json文件,其中的记录有上万条,上述方法就会变得麻烦,粘贴板也可能无法粘贴这么多文本。因此我想出了如下方法。
我们的基本思路是
文件主要的dependency为mongodb
包。
因此我们需要
const mongodb = require('mongodb');
导入json文件的方法比较简单,只需要require
const data = require('./Mydata.json');
将Mydata换为文件名
定义url
const url = 'mongodb://localhost/MyDatabase'
MyDatabase换为数据库名称。
由于连接数据与和导入数据的操作为异步操作,如果直接写在主程序中无法正常执行。因此我们可以定一个async函数
async function run() {
var client;
try {
client = await mongodb.MongoClient.connect(url, {useNewUrlParser: true});
console.log("connected...");
} catch(err) {
console.error(err);
return;
}
client.db('MyDatabase').collection('MyCollection').insertMany(data)
.then(console.log("imported successfully..."))
.catch(err => console.error(err));
}
最后我们运行run函数
run()
将以上整个程序存入一个文件中,名为importData.js
在terminal或cmd中运行这个文件
node importData.js
命令行中会出现
connected...
imported successfully...
说明我们已经成功导入数据。最后我们按Ctrl + C退出。