Node.js: Verbindung zu MongoDB herstellen
MongoDB ist ein dokumentenorientiertes Datenbankverwaltungssystem, geschrieben in C++.
In diesem Kapitel zeigen wir, wie Sie Node.js verwenden, um eine Verbindung zu MongoDB herzustellen und Datenbankoperationen auszuführen.
Wenn Sie noch keine Grundkenntnisse über MongoDB haben, können Sie sich auf unser Tutorial beziehen:MongoDB-Tutorial。
Treiber installieren
Dieses Tutorial verwendet denvon Taobao angepassten cnpm-Befehlzur Installation:
$ cnpm install mongodb
Nach erfolgreicher Installation können wir das MongoClient-Objekt verwenden, um eine Verbindung zur Datenbank herzustellen:
Beispiel
const { MongoClient } = require('mongodb');
async function main() {
// MongoDB-Verbindungs-URI
const uri = "mongodb://localhost:27017"; // Wenn Sie eine Remote-MongoDB verwenden, ändern Sie die URI entsprechend
// Einen neuen MongoClient erstellen
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
// Verbindung zum MongoDB-Server herstellen
await client.connect();
console.log("Erfolgreich mit dem Server verbunden");
} finally {
// Stellen Sie sicher, dass die Verbindung nach Abschluss geschlossen wird
await client.close();
}
}
main().catch(console.error);
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
Connected successfully to server
Beschreibung der Verbindungsparameter:
MongoClient: Dies ist der MongoDB-Client, mit dem eine Verbindung zur Datenbank hergestellt wird.uri: Dies ist die MongoDB-Verbindungszeichenfolge im Formatmongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]。useNewUrlParserunduseUnifiedTopologysind einige Optionen, mit denen sich einige alte Verbindungsverhalten vermeiden lassen.
Als Nächstes implementieren wir die Funktionen zum Erstellen, Lesen, Aktualisieren und Löschen (CRUD).
Datenbank erstellen
Um eine Datenbank in MongoDB zu erstellen, müssen wir zuerst ein MongoClient-Objekt erstellen und dann die angegebene URL und Portnummer konfigurieren.
Wenn die Datenbank nicht existiert, erstellt MongoDB die Datenbank und stellt die Verbindung her.
Verbindung erstellen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collection = database.collection('exampleCollection');
const doc = { name: "Example", type: "Test" };
const result = await collection.insertOne(doc);
console.log(`Neues Dokument erstellt,IDist: ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
成功连接到服务器
新文档已创建,ID 为: 6678e18e0bb3f4247be610d8
Sammlung erstellen
Wir können die createCollection()-Methode verwenden, um eine Collection zu erstellen:
Sammlung erstellen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Sammlung ${collectionName}erfolgreich erstellt`);
const collection = database.collection(collectionName);
const doc = { name: "Example", type: "Test" };
const result = await collection.insertOne(doc);
console.log(`Neues Dokument erstellt,IDist: ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
成功连接到服务器
集合 exampleCollection 创建成功
新文档已创建,ID 为: 6678e1b5c742b3ebd57f9759
Datenbankoperationen (CRUD)
Im Gegensatz zu MySQL erstellt MongoDB Datenbanken und Sammlungen automatisch, sodass wir sie nicht manuell vor der Verwendung erstellen müssen.
Daten einfügen
In the following example, we connect to the exampleCollection table in the example database and insert a piece of data, using insertOne() verwenden:
Ein Dokument einfügen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Sammlung ${collectionName}erfolgreich erstellt`);
const collection = database.collection(collectionName);
const doc = { name: "Alice", age: 25, address: "Wonderland" };
const result = await collection.insertOne(doc);
console.log(`Neues Dokument erstellt,IDist: ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
Führen Sie den folgenden Befehl aus, und das Ausgabeergebnis lautet:
成功连接到服务器
集合 exampleCollection 创建成功
新文档已创建,ID 为: 6678e1d1f9503dc2e0e2a20b
Aus dem Ausgabeergebnis geht hervor, dass die Daten erfolgreich eingefügt wurden.
Wir können auch den MongoDB-Client öffnen, um die Daten anzuzeigen, wie folgt:
> 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'
}
]
Wenn Sie mehrere Dokumente einfügen möchten, können SieinsertMany() verwenden:
Mehrere Dokumente einfügen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Sammlung ${collectionName}erfolgreich erstellt`);
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}neue Dokumente erstellt,IDist:`);
Object.keys(result.insertedIds).forEach((key, index) => {
console.log(`Dokument ${index + 1}: ${result.insertedIds[key]}`);
});
} finally {
await client.close();
}
}
main().catch(console.error);
Das Ausführungsergebnis ist:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 6678e30e80ac30e5e689f13a
文档 2: 6678e30e80ac30e5e689f13b
文档 3: 6678e30e80ac30e5e689f13c
Daten abfragen
Sie können find() verwenden, um nach Daten zu suchen. find() kann alle Daten zurückgeben, die den Bedingungen entsprechen.
Wenn keine Bedingungen angegeben sind, gibt find() alle Daten in der Sammlung zurück.
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Sammlung ${collectionName}erfolgreich erstellt`);
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}neue Dokumente erstellt,IDist:`);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`Dokument ${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("Abgefragte Dokumente:");
console.log(allValues);
} finally {
await client.close();
}
}
main().catch(console.error);
Das Ausführungsergebnis ist:
成功连接到服务器
集合 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' }
]
Das folgende Beispiel ruft Instanzen ab, bei denen name "Alice" ist:
Daten mit angegebenen Bedingungen abfragen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Sammlung ${collectionName}erfolgreich erstellt`);
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}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
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("Abgefragte Dokumente:");
console.log(allValues);
} finally {
await client.close();
}
}
main().catch(console.error);
Die Ausgabe nach Ausführung des folgenden Befehls ist:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
查询到的文档:
[
{ name: 'Alice', age: 25, address: 'Wonderland' }
]
Daten aktualisieren
Wir können auch Daten in der Datenbank ändern. Das folgende Beispiel aktualisiert die Daten, bei denen name 'Alice' ist:
Ein Dokument aktualisieren
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}erfolgreich erstellt`);
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}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
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}Dokument(e) entsprachen den Filterkriterien`);
console.log(`${updateResult.modifiedCount}Dokument(e) wurden aktualisiert`);
const updatedDocument = await collection.findOne(filter);
console.log("Aktualisierte Dokumente:");
console.log(updatedDocument);
} finally {
await client.close();
}
}
main().catch(console.error);
Nach erfolgreicher Ausführung sieht die Ausgabe wie folgt aus:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
1 个文档匹配筛选条件
1 个文档已更新
更新后的文档:
{
_id: new ObjectId('6678e1d1f9503dc2e0e2a20b'),
name: 'Alice',
age: 28,
address: 'New Wonderland'
}
Wenn Sie alle Dokumente aktualisieren möchten, die den Kriterien entsprechen, können SieupdateMany() verwenden:
Mehrere Dokumente aktualisieren
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}erfolgreich erstellt`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Alice", age: 28, address: "Altes Wunderland" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const filter = { name: "Alice" };
const updateDoc = {
$set: {
address: "Aktualisiertes Wunderland"
},
};
const updateResult = await collection.updateMany(filter, updateDoc);
console.log(`${updateResult.matchedCount}Dokument(e) entsprachen den Filterkriterien`);
console.log(`${updateResult.modifiedCount}Dokument(e) wurden aktualisiert`);
const updatedDocuments = await collection.find(filter).toArray();
console.log("Aktualisierte Dokumente:");
console.log(updatedDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Daten löschen
Das folgende Beispiel löscht die Daten, bei denen name Alice ist:
Ein Dokument löschen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}erfolgreich erstellt`);
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}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
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}Dokument(e) wurden gelöscht`);
const remainingDocuments = await collection.find({}).toArray();
console.log("Verbleibende Dokumente:");
console.log(documentDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Nach erfolgreicher Ausführung lautet die Ausgabe:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
1 个文档已删除
剩余的文档:
[
{
_id: new ObjectId('6678e18e0bb3f4247be610d8'),
name: 'Example',
type: 'Test'
},
...
Wenn Sie mehrere Dokumente löschen möchten, können Sie diedeleteMany()Methode verwenden
Das folgende Beispiel löscht alle Daten, bei denen type 'en' ist:
Mehrere Dokumente löschen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}erfolgreich erstellt`);
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}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
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}Dokument(e) wurden gelöscht`);
const remainingDocuments = await collection.find({}).toArray();
console.log("Verbleibende Dokumente:");
console.log(remainingDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Sort
Zum Sortieren wird die Methode sort() verwendet, die einen Parameter akzeptiert, der angibt, ob die Reihenfolge aufsteigend (1) oder absteigend (-1) ist.
Zum Beispiel:
{ type: 1 } // 按 type 字段升序
{ type: -1 } // 按 type 字段降序
Nach type in aufsteigender Reihenfolge sortieren:
Sortierung
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}erfolgreich erstellt`);
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}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const sortedDocsAsc = await collection.find().sort({ age: 1 }).toArray();
console.log("Nach dem Feld age in aufsteigender Reihenfolge sortierte Dokumente:");
console.log(sortedDocsAsc);
const sortedDocsDesc = await collection.find().sort({ age: -1 }).toArray();
console.log("Dokumente, sortiert nach dem Feld age in absteigender Reihenfolge:");
console.log(sortedDocsDesc);
} finally {
await client.close();
}
}
main().catch(console.error);
Abfrage-Paginierung
Wenn Sie die Anzahl der zurückgegebenen Dokumente festlegen möchten, können Sie dielimit()-Methode verwenden, die nur einen Parameter akzeptiert, der die Anzahl der zurückzugebenden Dokumente angibt.
limit(): Zwei Dokumente lesen
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}erfolgreich erstellt`);
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}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const limitedDocs = await collection.find().limit(3).toArray();
console.log("Die Abfrageergebnisse auf 3 Dokumente begrenzen:");
console.log(limitedDocs);
} finally {
await client.close();
}
}
main().catch(console.error);
Wenn Sie die Anzahl der zu überspringenden Dokumente angeben möchten, können Sie dieskip()-Methode verwenden.
Die skip()-Methode wird verwendet, um eine angegebene Anzahl von Dokumenten zu überspringen und die Abfrageergebnisse der verbleibenden Dokumente zurückzugeben.
skip(): Überspringen Sie die ersten beiden Dokumente und lesen Sie zwei Dokumente
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("Erfolgreich mit dem Server verbunden");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Collection ${collectionName}erfolgreich erstellt`);
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}neue(s) Dokument(e) wurde(n) erstellt,IDals: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const skippedDocs = await collection.find().skip(2).toArray();
console.log("Abfrageergebnisse nach dem Überspringen der ersten beiden Dokumente:");
console.log(skippedDocs);
} finally {
await client.close();
}
}
main().catch(console.error);
Verbindungsoperation
mongoDB ist keine relationale Datenbank, aber wir können$lookupverwenden, um einen Left Join zu implementieren.
$lookup ist ein Aggregations-Pipeline-Operator in MongoDB, der verwendet wird, um Left Outer Joins durchzuführen. Er kann verwendet werden, um Dokumente in einer Sammlung zu finden, die den Bedingungen in einer anderen Sammlung entsprechen, und sie zusammenzuführen.
Zum Beispiel haben wir zwei Sammlungen mit folgenden Daten:
Sammlung 1: orders
[
{ "_id": 1, "product_id": 101, "quantity": 2 },
{ "_id": 2, "product_id": 102, "quantity": 1 },
{ "_id": 3, "product_id": 103, "quantity": 4 }
]
Sammlung 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 }
]
Jetzt möchten wir die $lookup-Operation verwenden, um das Feld product_id in der orders-Sammlung mit dem Feld _id in der products-Sammlung zu verknüpfen und detaillierte Produktinformationen für jede Bestellung zu erhalten.
Im Folgenden wird ein MongoDB-Aggregationsbeispiel gezeigt, das diese Funktionalität implementiert:
Beispiel
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("Erfolgreich mit dem Server verbunden");
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("Ergebnisse der Left-Outer-Join-Abfrage:");
console.log(result);
} finally {
await client.close();
}
}
main().catch(console.error);
Collection löschen
Wir können diedrop()-Methode zum Löschen einer Sammlung verwenden:
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 gelöscht");
db.close();
});
});
Promise verwenden
Promise ist eine von ECMAScript 6 bereitgestellte Klasse, mit der komplexe asynchrone Aufgaben eleganter geschrieben werden können.
Wenn du Promise noch nicht verstehst, kannst du aufJavaScript Promise verweisen。
Das folgende Beispiel verwendet Promise, um eine Collection zu erstellen:
Beispiel
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("Erfolgreich mit dem MongoDB-Server verbunden");
resolve(client.db());
}
});
});
}
connectDB()
.then(database => {
console.log("Erfolgreich mit der Datenbank verbunden");
console.log("Datenbankname:", database.databaseName);
client.close();
})
.catch(err => {
console.error("Beim Verbinden mit der Datenbank ist ein Fehler aufgetreten:", err);
});
Promise-Datenoperationen
Jetzt implementieren wir vier aufeinanderfolgende Operationen in einem Programm: Hinzufügen, Abfragen, Aktualisieren und Löschen.
Beispiel
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("Erfolgreich mit dem MongoDB-Server verbunden");
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("Dokument erfolgreich hinzugefügt");
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("Ergebnis der Dokumentabfrage:");
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("Dokument erfolgreich aktualisiert");
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("Dokument erfolgreich gelöscht");
resolve(result);
}
});
});
}
async function performOperations() {
try {
const database = await connectDB();
const insertResult = await insertDocument(database, { name: "Dokument 1" });
const findResult = await findDocuments(database);
const updatedDocId = insertResult.insertedId;
const updateResult = await updateDocument(database, updatedDocId, { name: "Aktualisiertes Dokument 1" });
const deleteResult = await deleteDocument(database, updatedDocId);
console.log("Letzte Operation abgeschlossen:");
console.log("Ergebnis des Löschens des Dokuments:", deleteResult);
} catch (err) {
console.error("Ein Fehler ist aufgetreten, während die Operation ausgeführt wurde:", err);
} finally {
await client.close();
}
}
performOperations();
Ausführungsergebnis:
数据库已连接
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[]
Weitere Erweiterungen