在本教程中,我將向您展示如何從Node.js與MongoDB數據庫進行互動。

如果您對MongoDB不熟悉,請查閱我們的基礎指南,以及如何安裝和使用它的指南:)

我們將使用官方的mongodb npm套件。如果您已經有一個正在進行中的Node.js項目,可以使用以下命令來安裝它:

npm install mongodb

如果您從頭開始,請在終端中創建一個新的文件夾,然後運行npm init -y來啟動新的Node.js項目,然後運行npm install mongodb命令。

連接到MongoDB

您需要引入mongodb套件,然後從中獲取MongoClient對象。

const mongo = require('mongodb').MongoClient

創建MongoDB服務器的URL。如果您在本地使用MongoDB,URL將是類似mongodb://localhost:27017的形式,因為27017是默認端口。

const url = 'mongodb://localhost:27017'

然後使用mongo.connect()方法來獲取對MongoDB實例客戶端的引用。

mongo.connect(url, {
  useNewUrlParser: true,
  useUnifiedTopology: true
}, (err, client) => {
  if (err) {
    console.error(err)
    return
  }
  // ...
})

現在,您可以使用client.db()方法選擇數據庫。

const db = client.db('kennel')

創建並獲取集合

您可以使用db.collection()方法獲取集合。如果集合還不存在,它將被創建。

const collection = db.collection('dogs')

向集合插入數據

app.js中添加以下函數,它使用insertOne()方法將一個對象添加到dogs集合中。

collection.insertOne({name: 'Roger'}, (err, result) => {

})

您可以使用insertMany()來添加多個項目,將數組作為第一個參數傳入。

collection.insertMany([{name: 'Togo'}, {name: 'Syd'}], (err, result) => {

})

查找所有文檔

使用集合上的find()方法來獲取添加到集合中的所有文檔。

collection.find().toArray((err, items) => {
  console.log(items)
})

查找特定文檔

將對象傳遞給find()方法,以根據您需要檢索的條件對集合進行過濾。

collection.find({name: 'Togo'}).toArray((err, items) => {
  console.log(items)
})

如果您知道將只獲取一個元素,則可以跳過將游標轉換為數組的toArray()操作,直接調用findOne()

collection.findOne({name: 'Togo'}, (err, item) => {
  console.log(item)
})

更新現有文檔

使用updateOne()方法來更新文檔。

collection.updateOne({name: 'Togo'}, {'$set': {'name': 'Togo2'}}, (err, item) => {
  console.log(item)
})

刪除文檔

使用deleteOne()方法來刪除文檔。

collection.deleteOne({name: 'Togo'}, (err, item) => {
  console.log(item)
})

關閉連接

完成操作後,可以在客戶端對象上調用close()方法來關閉連接。

client.close()

使用Promises或Async/await

我使用了上述所有示例來使用回調(callback)語法。此API也支持Promises(承諾)(和Async/await)。

例如,以下代碼:

collection.findOne({name: 'Togo'}, (err, item) => {
  console.log(item)
})

可以使用Promises來改寫:

collection.findOne({name: 'Togo'})
  .then(item => {
    console.log(item)
  })
  .catch(err => {
    console.error(err)
  })

或者使用Async/await:

const find = async () => {
  try {
    const item = await collection.findOne({name: 'Togo'})
  } catch (err) {
    console.error(err)
  }
}

find()