Node.js 的本机 MongoDB 驱动程序
Node.JS 的本机 MongoDB 驱动程序是一个依赖项,它允许我们的 JavaScript 应用程序通过 MongoDB Atlas 在本地或云上与 NoSQL 数据库进行交互。我们可以使用 Promise 和回调,这让我们在使用 ES6 特性时更加灵活。
为了开始使用 MongoDB 驱动程序,我们首先要创建一个新文件夹并初始化我们的项目:
npm init -y
这里,-y 是一个标志,它将使用默认值初始化我们的项目。
我们将安装 MongoDB 驱动程序并使用以下命令将其保存为依赖项:
npm install mongodb --save
在我们的 JavaScript 入口点文件中,为了方便起见,我们将命名为app.js ,我们将编写以下代码来连接服务器:
JavaScript
// Importing MongoClient from mongodb driver
const { MongoClient } = require('mongodb');
// Conencting to a local port
const uri = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true
});
connect();
// ESNext syntax using async-await
async function connect() {
try {
await client.connect();
const db = client.db('cars');
console.log(
`Successfully connected to db ${db.databaseName}`);
}
catch (err) {
console.error(`we encountered ${err}`);
}
finally {
client.close();
}
}
JavaScript
const { MongoClient } = require('mongodb');
const uri = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true
});
connect();
async function connect() {
try {
await client.connect();
const db = client.db('cars');
console.log(
`Successfully connected to db ${db.databaseName}`);
const sportsCars = db.collection('SportsCars');
// Insertion
const cursorInsertion = await sportsCars.insertMany([
{
'company': 'mercedes',
'series': 'Black Series',
'model': 'SLS AMG'
},
{
'company': 'Audi',
'series': 'A series',
'model': 'A8'
}]);
console.log(cursorInsertion.insertedCount);
// Display
const cursorFind = sportsCars.find();
const data = await cursorFind.toArray();
console.table(data);
}
catch (err) {
console.error(`we encountered ${err}`);
}
finally {
client.close();
}
}
JavaScript
const { MongoClient } = require('mongodb');
const uri = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true
});
connect();
async function connect() {
try {
await client.connect();
const db = client.db('cars');
const sportsCars = db.collection('SportsCars');
//update
const cursorUpdate = await sportsCars.updateOne(
{ "company": "mercedes" },
{ "$set": { "status": "sold" } }
);
console.log(cursorUpdate.modifiedCount);
// Display
const cursorFind = sportsCars.find();
const data = await cursorFind.toArray();
console.table(data);
}
catch (err) {
console.error(`we encountered ${err}`);
}
finally {
client.close();
}
}
JavaScript
const { MongoClient } = require('mongodb');
const uri = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true
});
connect();
async function connect() {
try {
await client.connect();
const db = client.db('cars');
const sportsCars = db.collection('SportsCars');
//Delete
const cursorDelete = await sportsCars
.deleteOne({ "series": "A series" });
console.log(cursorDelete.deletedCount);
// Display
const cursorFind = sportsCars.find();
const data = await cursorFind.toArray();
console.table(data);
}
catch (err) {
console.error(`we encountered ${err}`);
}
finally {
client.close();
}
}
输出:
Successfully connected to db cars
现在我们已经建立了连接,让我们看看我们数据库上的一些基本的插入、读取、更新和删除操作:插入和读取:在下面的代码片段中,我们将处理插入和读取操作。
JavaScript
const { MongoClient } = require('mongodb');
const uri = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true
});
connect();
async function connect() {
try {
await client.connect();
const db = client.db('cars');
console.log(
`Successfully connected to db ${db.databaseName}`);
const sportsCars = db.collection('SportsCars');
// Insertion
const cursorInsertion = await sportsCars.insertMany([
{
'company': 'mercedes',
'series': 'Black Series',
'model': 'SLS AMG'
},
{
'company': 'Audi',
'series': 'A series',
'model': 'A8'
}]);
console.log(cursorInsertion.insertedCount);
// Display
const cursorFind = sportsCars.find();
const data = await cursorFind.toArray();
console.table(data);
}
catch (err) {
console.error(`we encountered ${err}`);
}
finally {
client.close();
}
}
说明:使用 collections() 方法创建了一个名为 sports cars 的集合。对于插入,我们使用以下两种方法:
- insertMany() 方法:此方法用于在游标的帮助下将多个条目插入数据库。在这种情况下,它需要一个对象数组作为参数。该方法返回一个承诺,因此我们使用了 await 关键字。或者,方法 insertOne() 用于将单个文档插入表中。
- InsertedCount:此函数用于计算插入的次数。
对于 Display,我们使用了以下方法:
- find():此方法用于借助游标查找数据库中的所有文档。
- toArray():此方法使用从 find() 方法接收的游标元素将数据库存储在对象数组中。这个方法返回一个promise,因此我们使用了关键字await。
片段的输出如下:
更新:以下代码片段将帮助我们更新数据库元素,然后我们将显示更新后的数据库:
JavaScript
const { MongoClient } = require('mongodb');
const uri = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true
});
connect();
async function connect() {
try {
await client.connect();
const db = client.db('cars');
const sportsCars = db.collection('SportsCars');
//update
const cursorUpdate = await sportsCars.updateOne(
{ "company": "mercedes" },
{ "$set": { "status": "sold" } }
);
console.log(cursorUpdate.modifiedCount);
// Display
const cursorFind = sportsCars.find();
const data = await cursorFind.toArray();
console.table(data);
}
catch (err) {
console.error(`we encountered ${err}`);
}
finally {
client.close();
}
}
说明:我们使用以下方法更新数据库:
- updateOne() 方法:此方法允许我们更新一个条目。它采用的第一个参数是对应于我们要更新的数据库条目的键值对。它可以是元素拥有的任何属性。第二个参数是一个更新命令 $set,它与一个对象配对。该对象再次是现有属性或新属性的键值对。如果该属性已存在,则使用传递的值更新该属性。如果它不存在,则添加它。这个方法返回一个promise,因此我们使用关键字await。或者,updateMany() 方法可用于更新多个文档。
- modifiedCount:在从前一个方法接收到的游标元素上调用此方法,并为我们提供更新条目数的计数。
输出:
删除条目:在以下代码段中,我们将删除基于系列的条目:
JavaScript
const { MongoClient } = require('mongodb');
const uri = 'mongodb://127.0.0.1:27017';
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true
});
connect();
async function connect() {
try {
await client.connect();
const db = client.db('cars');
const sportsCars = db.collection('SportsCars');
//Delete
const cursorDelete = await sportsCars
.deleteOne({ "series": "A series" });
console.log(cursorDelete.deletedCount);
// Display
const cursorFind = sportsCars.find();
const data = await cursorFind.toArray();
console.table(data);
}
catch (err) {
console.error(`we encountered ${err}`);
}
finally {
client.close();
}
}
说明:我们使用以下方法从数据库中删除条目“公司”:“奥迪”:
- deleteOne:此方法用于从数据库中删除一个条目。它接受与我们要删除的条目相对应的键值对。此方法返回一个承诺。因此,我们使用关键字 await。或者,可以使用 deleteMany() 方法一次删除多个文档。
- deletedCount:在从前一个方法接收到的游标元素上调用此方法,它返回已删除的数量。
输出:
因此,可以很容易地使用 Node 和 MongoDB 来制作高效的后端 CRUD api。