如何在Node.js中使用MongoDB

856 阅读2分钟

如果你不熟悉MongoDB,请查看我们关于其基础知识以及如何安装和使用它的指南:)

我们将使用官方的mongodb npm包。如果你已经有了一个正在进行的Node.js项目,请用以下方式安装它

如果你从头开始,用你的终端创建一个新的文件夹,运行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')

在一个集合中插入数据 a Document

在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)
})

如果你知道你将得到一个元素,你可以通过调用findOne() ,跳过游标的toArray() 转换。

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() 方法。

使用承诺或async/await

我发布了所有这些使用回调语法的例子。这个API也支持承诺(和async/await)。

比如说这个

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

可以使用承诺。

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()