MongoDB Node 驱动介绍
1. MongoDB数据库连接指南
使用原生的mongodb
Node驱动连接MongoDB数据库。
1.1 数据库连接URI
数据库连接URI是一个指明了数据库地址、名称、用户名、密码的字符串,类似于网页链接。
1.2 Node驱动安装
使用Npm或者Yarn安装数据库驱动程序:
npm install mongodb
# or
yarn install mongodb
如果使用的是Typescript语言,需要额外的安装Node类型定义:
npm install @types/node
1.3 连接到MongoDB
注意:在执行此步骤之前,需要你已经安装了MongoDB数据库,并确保服务开启。
为了避免像迷宫一样的官网带来困扰,可以看这里:MongoDB数据库简介、安装和基本使用
如果你希望自己下载最新版本的数据库,请访问官网:MongoDB: The Developer Data Platform | MongoDB,并按照以下图片指引找到最新版本链接。
创建js
文件,并编辑如下:
import { MongoClient } from 'mongodb';
const uri = 'mongodb://ahohAdmin:123456@127.0.0.1:27017/db_ahoh'
const client = new MongoClient(uri)
async function run() {
try {
const database = client.db('db_ahoh')
const movies = database.collection('movies')
await movies.insertOne({ name: '我的36个老婆' }) //插入数据
const query = { name: '我的36个老婆' } //查询条件
const movie = await movies.findOne(query) //执行查询
console.log(movie)
} catch (error) {
console.log(error)
} finally {
await client.close()
}
}
run().catch(console.dir)
以上代码首先插入了一条数据,然后又通过findOne
查询了插入的数据。
2. MongoDB数据插入指南
向集合(表)中插入一条或多条数据,MongoDB常用的插入操作有三种:insertOne()
、insertMany
和bulkWrite()
。
2.1 默认的数据标识(主键)_id
当我们插入一条文档(数据)时,MongoDB默认的会强制给这条数据插入一个唯一的_id
属性。如果我们插入数据的时候,数据中已经有了此属性(id
属性也行),MongoDB不会再生成这个属性。
我们可以直接维护这个属性,但是必须保证属性值唯一,也可以使用驱动产生一个唯一表示作为_id
的值。
注意:除非你有足够的理由不使用默认值,且保证其值唯一,否则我还是建议你维持现状,让驱动自动的帮你完成这一切。
2.2 插入一条数据
使用insertOne()
方法插入一条数据,成功后返回一个InsertOneResult
对象的实例展示插入数据的_id
值,结构如下:
{
acknowledged: true,
insertedId: new ObjectId("639833c04b5b998bcaaaa2af")
}
举例:
import { MongoClient } from 'mongodb';
const uri = 'mongodb://ahohAdmin:123456@127.0.0.1:27017/db_ahoh'
const client = new MongoClient(uri)
async function run() {
try {
const database = client.db('db_ahoh')
const movies = database.collection('movies')
let res = await movies.insertOne({ name: '我的37个小妾' }) //插入数据
console.log(`数据成功插入,插入数据的ID是:${res.insertedId}`)
} catch (error) {
console.log(error)
} finally {
await client.close()
}
}
run().catch(console.dir)
代码输出结果:
数据成功插入,插入数据的ID是:639834783d714627b8e3ce06
2.3 插入多条数据
使用insertMany()
方法插入多条数据,该方法会根据传入的数据依次插入,知道完成作业或发生异常。
insertMany()
方法返回一个InsertManyResult
对象实例,其结构如下:
{
acknowledged: true,
insertedCount: 4,
insertedIds: {
'0': new ObjectId("639836f7d9d870a7aa8a0138"),
'1': new ObjectId("639836f7d9d870a7aa8a0139"),
'2': new ObjectId("639836f7d9d870a7aa8a013a"),
'3': new ObjectId("639836f7d9d870a7aa8a013b")
}
}
例如,假设需要插入以下数据:
{ name: 'bingbing', desc: "The first wife i want." },
{ name: 'xishi', desc: "The second wife i want." },
{ name: 'diaochan', desc: "The third wife i want." },
{ name: 'chenyuanyuan', desc: "The forth wife i want." },
代码如下:
import { MongoClient } from 'mongodb';
const uri = 'mongodb://ahohAdmin:123456@127.0.0.1:27017/db_ahoh'
const client = new MongoClient(uri)
async function run() {
try {
const database = client.db('db_ahoh')
const movies = database.collection('movies')
let wifes = [
{ name: 'bingbing', desc: "The first wife i want." },
{ name: 'xishi', desc: "The second wife i want." },
{ name: 'diaochan', desc: "The third wife i want." },
{ name: 'chenyuanyuan', desc: "The forth wife i want." },
]
let res = await movies.insertMany(wifes)
let ids = res.insertedIds
for (let id of Object.values(ids)) {
console.log(`inserted wife ${id} successfully`)
}
} catch (error) {
console.log(error)
} finally {
await client.close()
}
}
run().catch(console.dir)
代码输出:
inserted wife 6398376ca83cd05c318c4fec successfully
inserted wife 6398376ca83cd05c318c4fed successfully
inserted wife 6398376ca83cd05c318c4fee successfully
inserted wife 6398376ca83cd05c318c4fef successfully
2.4 执行多个操作
bulkWrite()
方法对单个集合一次性执行批量的写操作。这种方法减少了从应用程序到服务器的网络往返次数,从而提高了吞吐量和性能。只有在传递给方法的所有操作完成后,bulkWrite()
才会返回所有操作的结果集合。
bulkWrite()
返回一个BulkWriteResult
对象实例,结构如下:
BulkWriteResult {
result: {
ok: 1,
writeErrors: [],
writeConcernErrors: [],
insertedIds: [ [Object], [Object] ],
nInserted: 2,
nUpserted: 1,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [ [Object] ]
}
}
我们可以将以下的一个或多个操作放在bulkWrite()
中,一次性执行。
insertOne
updateOne
updateMany
deleteOne
deleteMany
replaceOne
举例如下:
import { MongoClient } from 'mongodb';
const uri = 'mongodb://ahohAdmin:123456@127.0.0.1:27017/db_ahoh'
const client = new MongoClient(uri)
async function run() {
try {
const database = client.db('db_ahoh')
const movies = database.collection('movies')
const result = await movies.bulkWrite([
{
insertOne: {//插入一个
document: {//文档
name: '我的第38个暖床丫头',
},
},
},
{
insertOne: {
document: {
name: '我的第39个暖床丫头',
},
},
},
{
updateMany: {
// Important: You lose type safety when you use dot notation in queries
filter: { "name": "xishi" },
update: { $set: { name: '吕布' } },
upsert: true,
},
},
{
deleteOne: {
filter: { "name": "diaochan" },
},
},
]);
console.log(result);
} catch (error) {
console.log(error)
} finally {
await client.close()
}
}
run().catch(console.dir)
以上代码执行了两个插入、一个更新、一个删除操作。
代码执行结果:
BulkWriteResult {
result: {
ok: 1,
writeErrors: [],
writeConcernErrors: [],
insertedIds: [ [Object], [Object] ],
nInserted: 2,
nUpserted: 0,
nMatched: 3,
nModified: 3,
nRemoved: 1,
upserted: []
}
}