在本教程中,我將向您展示如何從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()