Comment utiliser MongoDB avec Node.js

Dans ce didacticiel, je vais vous montrer comment interagir avec une base de données MongoDB à partir de Node.js

Si vous n'êtes pas familier avecMongoDBconsultez notre guide sur ses bases et sur la façon de l'installer et de l'utiliser :)

Nous utiliserons le fonctionnairemongodb npmpaquet. Si vous avez déjà un projet Node.js sur lequel vous travaillez, installez-le en utilisant

npm install mongodb

Si vous partez de zéro, créez un nouveau dossier avec votreTerminalet courirnpm init -ypour démarrer un nouveau projet Node.js, puis exécutez lenpm install mongodbcommander.

Connexion à MongoDB

Vous avez besoin dumongodbpackage et vous en obtenez l'objet MongoClient.

const mongo = require('mongodb').MongoClient

Créez une URL vers le serveur MongoDB. Si vous utilisez MongoDB localement, l'URL sera quelque chose commemongodb://localhost:27017, comme27017est le port par défaut.

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

Ensuite, utilisez lemongo.connect()méthode pour obtenir la référence au client de l'instance MongoDB:

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

Vous pouvez maintenant sélectionner une base de données à l'aide duclient.db()méthode:

const db = client.db('kennel')

Créer et obtenir une collection

Vous pouvez obtenir une collection en utilisant ledb.collection()méthode. Si la collection n'existe pas encore, elle est créée.

const collection = db.collection('dogs')

Insérer des données dans une collection un document

Ajoutez à app.js la fonction suivante qui utilise leinsertOne()méthode pour ajouter un objetdogscollection.

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

})

Vous pouvez ajouter plusieurs éléments en utilisantinsertMany(), en passant un tableau comme premier paramètre:

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

})

Retrouvez tous les documents

Utilisez lefind()méthode sur la collection pour obtenir tous les documents ajoutés à la collection:

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

Trouver un document spécifique

Passez un objet aufind()méthode pour filtrer la collection en fonction de ce que vous devez récupérer:

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

Si vous savez que vous allez obtenir un élément, vous pouvez ignorertoArray()conversion du curseur en appelantfindOne():

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

Mettre à jour un document existant

Utilisez leupdateOne()méthode pour mettre à jour un document:

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

Supprimer un document

Utilisez ledeleteOne()méthode pour supprimer un document:

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

Fermer la connexion

Une fois que vous avez terminé les opérations, vous pouvez appeler leclose()méthode sur l'objet client:

client.close()

Utiliser les promesses ou asynchroniser / attendre

J'ai posté tous ces exemples en utilisant lerappelersyntaxe. Cette API prend en chargepromesses(etasynchroniser / attendre) ainsi que.

Par exemple ceci

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

Peut être utilisé avec des promesses:

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

ou async / wait:

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

find()

Téléchargez mon gratuitManuel de Node.js


Plus de didacticiels sur les nœuds: