📜  Node.js 的本机 MongoDB 驱动程序

📅  最后修改于: 2022-05-13 01:56:28.399000             🧑  作者: Mango

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 的集合。对于插入,我们使用以下两种方法:

  1. insertMany() 方法:此方法用于在游标的帮助下将多个条目插入数据库。在这种情况下,它需要一个对象数组作为参数。该方法返回一个承诺,因此我们使用了 await 关键字。或者,方法 insertOne() 用于将单个文档插入表中。
  2. InsertedCount:此函数用于计算插入的次数。

对于 Display,我们使用了以下方法:

  1. find():此方法用于借助游标查找数据库中的所有文档。
  2. 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();
    }
}

说明:我们使用以下方法更新数据库:

  1. updateOne() 方法:此方法允许我们更新一个条目。它采用的第一个参数是对应于我们要更新的数据库条目的键值对。它可以是元素拥有的任何属性。第二个参数是一个更新命令 $set,它与一个对象配对。该对象再次是现有属性或新属性的键值对。如果该属性已存在,则使用传递的值更新该属性。如果它不存在,则添加它。这个方法返回一个promise,因此我们使用关键字await。或者,updateMany() 方法可用于更新多个文档。
  2. 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();
    }
}

说明:我们使用以下方法从数据库中删除条目“公司”:“奥迪”:

  1. deleteOne:此方法用于从数据库中删除一个条目。它接受与我们要删除的条目相对应的键值对。此方法返回一个承诺。因此,我们使用关键字 await。或者,可以使用 deleteMany() 方法一次删除多个文档。
  2. deletedCount:在从前一个方法接收到的游标元素上调用此方法,它返回已删除的数量。

输出:

因此,可以很容易地使用 Node 和 MongoDB 来制作高效的后端 CRUD api。