/

如何在Node.js中使用MongoDB

如何在Node.js中使用MongoDB

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

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

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

1
npm install mongodb

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

連接到MongoDB

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

1
const mongo = require('mongodb').MongoClient

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

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

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

1
2
3
4
5
6
7
8
9
10
mongo.connect(url, {
useNewUrlParser: true,
useUnifiedTopology: true
}, (err, client) => {
if (err) {
console.error(err)
return
}
// ...
})

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

1
const db = client.db('kennel')

創建並獲取集合

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

1
const collection = db.collection('dogs')

向集合插入數據

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

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

})

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

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

})

查找所有文檔

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

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

查找特定文檔

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

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

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

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

更新現有文檔

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

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

刪除文檔

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

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

關閉連接

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

1
client.close()

使用Promises或Async/await

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

例如,以下代碼:

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

可以使用Promises來改寫:

1
2
3
4
5
6
7
collection.findOne({name: 'Togo'})
.then(item => {
console.log(item)
})
.catch(err => {
console.error(err)
})

或者使用Async/await:

1
2
3
4
5
6
7
8
9
const find = async () => {
try {
const item = await collection.findOne({name: 'Togo'})
} catch (err) {
console.error(err)
}
}

find()

tags: [“MongoDB”, “Node.js”, “npm”, “MongoDB數據庫”, “Node.js項目”, “callback語法”, “Promises”, “Async/await”]