Node.js Se connecter à MongoDB
MongoDB est un système de gestion de base de données orienté document, écrit en C++.
Dans ce chapitre, nous allons présenter comment utiliser Node.js pour se connecter à MongoDB et effectuer des opérations sur la base de données.
Si vous n'avez pas encore de connaissances de base sur MongoDB, vous pouvez vous référer à notre tutoriel :Tutoriel MongoDB。
Installer le pilote
Ce tutoriel utilise lacommande cnpm personnalisée de Taobaopour installer :
$ cnpm install mongodb
Après une installation réussie, nous pouvons utiliser l'objet MongoClient pour nous connecter à la base de données :
Exemple
const { MongoClient } = require('mongodb');
async function main() {
// URI de connexion MongoDB
const uri = "mongodb://localhost:27017"; // Si vous utilisez un MongoDB distant, veuillez modifier l'URI en conséquence
// Créer un nouveau MongoClient
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
// Se connecter au serveur MongoDB
await client.connect();
console.log("Connecté avec succès au serveur");
} finally {
// Assurez-vous de fermer la connexion lorsque vous avez terminé
await client.close();
}
}
main().catch(console.error);
L'exécution du code ci-dessus produit la sortie suivante :
Connected successfully to server
Description des paramètres de connexion :
MongoClient: Ceci est le client MongoDB, utilisé pour se connecter à la base de données.uri: Il s'agit de la chaîne de connexion MongoDB, au formatmongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]。useNewUrlParseretuseUnifiedTopologysont des options utilisées pour éviter certains anciens comportements de connexion.
Ensuite, nous allons implémenter les fonctions de création, lecture, mise à jour et suppression (CRUD).
Créer une base de données
Pour créer une base de données dans MongoDB, nous devons d'abord créer un objet MongoClient, puis configurer l'URL et le numéro de port spécifiés.
Si la base de données n'existe pas, MongoDB créera la base de données et établira la connexion.
Créez une connexion
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collection = database.collection('exampleCollection');
const doc = { name: "Example", type: "Test" };
const result = await collection.insertOne(doc);
console.log(`Nouveau document créé,IDest : ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
L'exécution du code ci-dessus produit la sortie suivante :
成功连接到服务器
新文档已创建,ID 为: 6678e18e0bb3f4247be610d8
Créer une collection
Nous pouvons utiliser la méthode createCollection() pour créer une collection :
Créer une collection
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const doc = { name: "Exemple", type: "Test" };
const result = await collection.insertOne(doc);
console.log(`Nouveau document créé,IDest : ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
L'exécution du code ci-dessus produit la sortie suivante :
成功连接到服务器
集合 exampleCollection 创建成功
新文档已创建,ID 为: 6678e1b5c742b3ebd57f9759
Opérations sur la base de données (CRUD)
Contrairement à MySQL, MongoDB crée automatiquement des bases de données et des collections, donc nous n'avons pas besoin de les créer manuellement avant de les utiliser.
Insertion de données
Dans l'exemple suivant, nous nous connectons à la table exampleCollection dans la base de données example et insérons une donnée, en utilisant insertOne():
Insérer un document
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const doc = { name: "Alice", age: 25, address: "Wonderland" };
const result = await collection.insertOne(doc);
console.log(`Nouveau document créé,IDest : ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
Exécutez la commande suivante, et le résultat de sortie est :
成功连接到服务器
集合 exampleCollection 创建成功
新文档已创建,ID 为: 6678e1d1f9503dc2e0e2a20b
D'après le résultat de sortie, les données ont été insérées avec succès.
Nous pouvons également ouvrir le client MongoDB pour afficher les données, par exemple :
> show dbs
example 0.000GB # 创建了 example 数据库
> use example # 切换到 example 数据库
example> show tables
exampleCollection # 创建了 exampleCollection 集合(数据表)
# 自动创建了 site 集合(数据表)
example> db.exampleCollection.find()
[
{
_id: ObjectId('6678e1d1f9503dc2e0e2a20b'),
name: 'Alice',
age: 25,
address: 'Wonderland'
}
]
Si vous souhaitez insérer plusieurs documents, vous pouvez utiliserinsertMany():
Insérer plusieurs documents
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}nouveaux documents créés,IDest:`);
Object.keys(result.insertedIds).forEach((key, index) => {
console.log(`Document ${index + 1}: ${result.insertedIds[key]}`);
});
} finally {
await client.close();
}
}
main().catch(console.error);
Le résultat de sortie de l'exécution est :
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 6678e30e80ac30e5e689f13a
文档 2: 6678e30e80ac30e5e689f13b
文档 3: 6678e30e80ac30e5e689f13c
Interroger les données
Vous pouvez utiliser find() pour rechercher des données. find() peut renvoyer toutes les données correspondant aux conditions.
Si aucune condition n'est spécifiée, find() renvoie toutes les données de la collection.
find()
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}nouveaux documents créés,IDest:`);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`Document ${index + 1}: ${id}`);
});
const query = {};
const options = { projection: { _id: 0, name: 1, age: 1, address: 1 } };
const cursor = collection.find(query, options);
const allValues = await cursor.toArray();
console.log("Documents interrogés :");
console.log(allValues);
} finally {
await client.close();
}
}
main().catch(console.error);
Le résultat de sortie de l'exécution est :
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
查询到的文档:
[
{ name: 'Alice', age: 25, address: 'Wonderland' },
{ name: 'Bob', age: 30, address: 'Builderland' },
{ name: 'Charlie', age: 35, address: 'Chocolate Factory' }
]
L'exemple suivant récupère les instances où name est "Alice" :
Interroger des données avec des conditions spécifiées
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const query = { name: "Alice" };
const options = { projection: { _id: 0, name: 1, age: 1, address: 1 } };
const cursor = collection.find(query, options);
const allValues = await cursor.toArray();
console.log("Documents interrogés :");
console.log(allValues);
} finally {
await client.close();
}
}
main().catch(console.error);
La sortie après l'exécution de la commande suivante est :
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
查询到的文档:
[
{ name: 'Alice', age: 25, address: 'Wonderland' }
]
Mettre à jour les données
Nous pouvons également modifier les données dans la base de données. L'exemple suivant mettra à jour les données où name est 'Alice' :
Mettre à jour un document
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const filter = { name: "Alice" };
const updateDoc = {
$set: {
age: 28,
address: "New Wonderland"
},
};
const updateResult = await collection.updateOne(filter, updateDoc);
console.log(`${updateResult.matchedCount}document(s) correspondent aux critères du filtre`);
console.log(`${updateResult.modifiedCount}document(s) ont été mis à jour`);
const updatedDocument = await collection.findOne(filter);
console.log("Documents mis à jour :");
console.log(updatedDocument);
} finally {
await client.close();
}
}
main().catch(console.error);
Après une exécution réussie, la sortie est la suivante :
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
1 个文档匹配筛选条件
1 个文档已更新
更新后的文档:
{
_id: new ObjectId('6678e1d1f9503dc2e0e2a20b'),
name: 'Alice',
age: 28,
address: 'New Wonderland'
}
Si vous souhaitez mettre à jour tous les documents qui correspondent aux critères, vous pouvez utiliserupdateMany():
Mettre à jour plusieurs documents
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Alice", age: 28, address: "Ancien Wonderland" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const filter = { name: "Alice" };
const updateDoc = {
$set: {
address: "Wonderland mis à jour"
},
};
const updateResult = await collection.updateMany(filter, updateDoc);
console.log(`${updateResult.matchedCount}document(s) correspondent aux critères du filtre`);
console.log(`${updateResult.modifiedCount}document(s) ont été mis à jour`);
const updatedDocuments = await collection.find(filter).toArray();
console.log("Documents mis à jour :");
console.log(updatedDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Supprimer les données
L'exemple suivant supprime les données où name est 'Alice' :
Supprimer un document
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const filter = { name: "Alice" };
const deleteResult = await collection.deleteOne(filter);
console.log(`${deleteResult.deletedCount}document(s) ont été supprimés`);
const remainingDocuments = await collection.find({}).toArray();
console.log("Documents restants :");
console.log(remainingDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Après une exécution réussie, la sortie est :
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
1 个文档已删除
剩余的文档:
[
{
_id: new ObjectId('6678e18e0bb3f4247be610d8'),
name: 'Example',
type: 'Test'
},
...
Si vous souhaitez supprimer plusieurs documents, vous pouvez utiliser la méthodedeleteMany()method
L'exemple suivant supprime toutes les données où type est 'en' :
Supprimer plusieurs documents
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Alice", age: 28, address: "Old Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const filter = { name: "Alice" };
const deleteResult = await collection.deleteMany(filter);
console.log(`${deleteResult.deletedCount}document(s) ont été supprimés`);
const remainingDocuments = await collection.find({}).toArray();
console.log("Documents restants :");
console.log(remainingDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Sort
Le tri utilise la méthode sort(), qui accepte un paramètre pour spécifier si l'ordre est croissant (1) ou décroissant (-1).
Par exemple :
{ type: 1 } // 按 type 字段升序
{ type: -1 } // 按 type 字段降序
Trier par type dans l'ordre croissant :
Tri
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" },
{ name: "Dave", age: 20, address: "Dreamland" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const sortedDocsAsc = await collection.find().sort({ age: 1 }).toArray();
console.log("Documents triés par le champ age dans l'ordre croissant :");
console.log(sortedDocsAsc);
const sortedDocsDesc = await collection.find().sort({ age: -1 }).toArray();
console.log("Documents triés par le champ age dans l'ordre décroissant :");
console.log(sortedDocsDesc);
} finally {
await client.close();
}
}
main().catch(console.error);
Pagination des requêtes
Si vous souhaitez définir le nombre de documents renvoyés, vous pouvez utiliser la méthodelimit(), qui accepte uniquement un paramètre spécifiant le nombre de documents à renvoyer.
limit() : Lire deux documents
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" },
{ name: "Dave", age: 20, address: "Dreamland" },
{ name: "Eve", age: 22, address: "Eden" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const limitedDocs = await collection.find().limit(3).toArray();
console.log("Limiter les résultats de la requête à 3 documents :");
console.log(limitedDocs);
} finally {
await client.close();
}
}
main().catch(console.error);
Si vous souhaitez spécifier le nombre de documents à ignorer, vous pouvez utiliser la méthodeskip().
La méthode skip() est utilisée pour ignorer un nombre spécifié de documents et renvoyer les résultats de la requête des documents restants.
skip() : Ignorer les deux premiers documents et lire deux documents
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}créée avec succès`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Charlie", age: 35, address: "Chocolate Factory" },
{ name: "Dave", age: 20, address: "Dreamland" },
{ name: "Eve", age: 22, address: "Eden" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}de nouveaux documents ont été créés,IDcomme : `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const skippedDocs = await collection.find().skip(2).toArray();
console.log("Résultats de la requête après avoir ignoré les deux premiers documents :");
console.log(skippedDocs);
} finally {
await client.close();
}
}
main().catch(console.error);
Opération de connexion
mongoDB n'est pas une base de données relationnelle, mais nous pouvons utiliser$lookuppour implémenter une jointure gauche.
$lookup est un opérateur de pipeline d'agrégation dans MongoDB utilisé pour effectuer des jointures externes gauches. Il peut être utilisé pour trouver des documents dans une collection qui correspondent aux conditions dans une autre collection et les fusionner ensemble.
Par exemple, nous avons deux collections avec les données suivantes :
Collection 1 : orders
[
{ "_id": 1, "product_id": 101, "quantity": 2 },
{ "_id": 2, "product_id": 102, "quantity": 1 },
{ "_id": 3, "product_id": 103, "quantity": 4 }
]
Collection 2 : products
[
{ "_id": 101, "name": "Product A", "price": 50 },
{ "_id": 102, "name": "Product B", "price": 70 },
{ "_id": 103, "name": "Product C", "price": 100 },
{ "_id": 104, "name": "Product D", "price": 120 }
]
Nous voulons maintenant utiliser l'opération $lookup pour associer le champ product_id de la collection orders au champ _id de la collection products, et obtenir des informations détaillées sur le produit pour chaque commande.
Voici un exemple d'agrégation MongoDB qui implémente cette fonctionnalité :
Exemple
const { MongoClient } = require('mongodb');
async function main() {
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
console.log("Connecté avec succès au serveur");
const database = client.db('mydatabase');
const ordersCollection = database.collection('orders');
const productsCollection = database.collection('products');
const pipeline = [
{
$lookup: {
from: 'products',
localField: 'product_id',
foreignField: '_id',
as: 'productDetails'
}
}
];
const result = await ordersCollection.aggregate(pipeline).toArray();
console.log("Résultats de la requête de jointure externe gauche:");
console.log(result);
} finally {
await client.close();
}
}
main().catch(console.error);
Supprimer une collection
Nous pouvons utiliserdrop()méthode pour supprimer une collection :
drop()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("example");
dbo.collection("test").drop(function(err, delOK) {
if (err) throw err;
if (delOK) console.log("Collection supprimée");
db.close();
});
});
Utilisation de Promise
Promise est une classe fournie par ECMAScript 6, destinée à écrire des tâches asynchrones complexes de manière plus élégante.
Si vous ne comprenez pas encore Promise, vous pouvez vous référer àJavaScript Promise。
L'exemple suivant utilise Promise pour créer une collection :
Exemple
const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
function connectDB() {
return new Promise((resolve, reject) => {
client.connect((err) => {
if (err) {
reject(err);
} else {
console.log("Connexion réussie au serveur MongoDB");
resolve(client.db());
}
});
});
}
connectDB()
.then(database => {
console.log("Connexion réussie à la base de données");
console.log("Nom de la base de données :", database.databaseName);
client.close();
})
.catch(err => {
console.error("Une erreur est survenue lors de la connexion à la base de données :", err);
});
Opérations de données avec Promise
Maintenant, implémentons quatre opérations consécutives dans un seul programme : ajouter, interroger, mettre à jour et supprimer.
Exemple
const { MongoClient, ObjectId } = require('mongodb');
const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
function connectDB() {
return new Promise((resolve, reject) => {
client.connect((err) => {
if (err) {
reject(err);
} else {
console.log("Connexion réussie au serveur MongoDB");
resolve(client.db());
}
});
});
}
function insertDocument(db, document) {
const collection = db.collection('documents');
return new Promise((resolve, reject) => {
collection.insertOne(document, (err, result) => {
if (err) {
reject(err);
} else {
console.log("Document ajouté avec succès");
resolve(result);
}
});
});
}
function findDocuments(db) {
const collection = db.collection('documents');
return new Promise((resolve, reject) => {
collection.find({}).toArray((err, docs) => {
if (err) {
reject(err);
} else {
console.log("Résultat de la requête des documents :");
console.log(docs);
resolve(docs);
}
});
});
}
function updateDocument(db, id, updatedValues) {
const collection = db.collection('documents');
return new Promise((resolve, reject) => {
collection.updateOne({ _id: ObjectId(id) }, { $set: updatedValues }, (err, result) => {
if (err) {
reject(err);
} else {
console.log("Document mis à jour avec succès");
resolve(result);
}
});
});
}
function deleteDocument(db, id) {
const collection = db.collection('documents');
return new Promise((resolve, reject) => {
collection.deleteOne({ _id: ObjectId(id) }, (err, result) => {
if (err) {
reject(err);
} else {
console.log("Document supprimé avec succès");
resolve(result);
}
});
});
}
async function performOperations() {
try {
const database = await connectDB();
const insertResult = await insertDocument(database, { name: "Document 1" });
const findResult = await findDocuments(database);
const updatedDocId = insertResult.insertedId;
const updateResult = await updateDocument(database, updatedDocId, { name: "Document 1 mis à jour" });
const deleteResult = await deleteDocument(database, updatedDocId);
console.log("Opération finale terminée :");
console.log("Résultat de la suppression du document :", deleteResult);
} catch (err) {
console.error("Une erreur s'est produite lors de l'exécution de l'opération :", err);
} finally {
await client.close();
}
}
performOperations();
Résultat de l'exécution :
数据库已连接
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[]
Autres extensions