Node.js: подключение к MongoDB
MongoDB — это документо-ориентированная система управления базами данных, написанная на C++.
В этой главе мы расскажем, как использовать Node.js для подключения к MongoDB и выполнения операций с базой данных.
Если у вас ещё нет базовых знаний о MongoDB, вы можете обратиться к нашему учебнику:Учебник по MongoDB。
Установка драйвера
В этом учебнике используетсяадаптированная для Taobao команда cnpmдля установки:
$ cnpm install mongodb
После успешной установки мы можем использовать объект MongoClient для подключения к базе данных:
Пример
const { MongoClient } = require('mongodb');
async function main() {
// URI подключения к MongoDB
const uri = "mongodb://localhost:27017"; // Если вы используете удалённый экземпляр MongoDB, измените URI соответствующим образом
// Создание нового MongoClient
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
// Подключиться к серверу MongoDB
await client.connect();
console.log("Успешно подключено к серверу");
} finally {
// Обязательно закройте соединение после завершения
await client.close();
}
}
main().catch(console.error);
Выполнение приведенного выше кода дает следующий вывод:
Connected successfully to server
Описание параметров подключения:
MongoClient: Это клиент MongoDB, используемый для подключения к базе данных.uri: Это строка подключения MongoDB в форматеmongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]。useNewUrlParserиuseUnifiedTopology— это некоторые параметры, используемые для предотвращения некоторых старых вариантов поведения при подключении.
Далее мы реализуем функции создания, чтения, обновления и удаления (CRUD).
Создание базы данных
Чтобы создать базу данных в MongoDB, сначала нужно создать объект MongoClient, затем настроить указанный URL и номер порта.
Если база данных не существует, MongoDB создаст базу данных и установит соединение.
Создайте соединение
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("Успешно подключено к серверу");
const database = client.db('example');
const collection = database.collection('exampleCollection');
const doc = { name: "Example", type: "Test" };
const result = await collection.insertOne(doc);
console.log(`Создан новый документ,ID: ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
Выполнение приведенного выше кода дает следующий вывод:
成功连接到服务器
新文档已创建,ID 为: 6678e18e0bb3f4247be610d8
Создание коллекции
Мы можем использовать метод createCollection() для создания коллекции:
Создание коллекции
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Коллекция ${collectionName}успешно создана`);
const collection = database.collection(collectionName);
const doc = { name: "Пример", type: "Test" };
const result = await collection.insertOne(doc);
console.log(`Новый документ создан,IDравен: ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
Выполнение приведенного выше кода дает следующий вывод:
成功连接到服务器
集合 exampleCollection 创建成功
新文档已创建,ID 为: 6678e1b5c742b3ebd57f9759
Операции с базой данных (CRUD)
В отличие от MySQL, MongoDB автоматически создаёт базы данных и коллекции, поэтому нам не нужно создавать их вручную перед использованием.
Вставка данных
В следующем примере мы подключаемся к таблице exampleCollection в базе данных example и вставляем фрагмент данных, используя insertOne():
Вставить один документ
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Коллекция ${collectionName}успешно создана`);
const collection = database.collection(collectionName);
const doc = { name: "Alice", age: 25, address: "Wonderland" };
const result = await collection.insertOne(doc);
console.log(`Создан новый документ,ID: ${result.insertedId}`);
} finally {
await client.close();
}
}
main().catch(console.error);
Выполните следующую команду, и результат вывода будет:
成功连接到服务器
集合 exampleCollection 创建成功
新文档已创建,ID 为: 6678e1d1f9503dc2e0e2a20b
Из результата вывода видно, что данные успешно вставлены.
Мы также можем открыть клиент MongoDB, чтобы просмотреть данные, например:
> 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'
}
]
Если вы хотите вставить несколько документов, вы можете использоватьinsertMany():
Вставить несколько документов
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Коллекция ${collectionName}успешно создана`);
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}создано новых документов,ID: `);
Object.keys(result.insertedIds).forEach((key, index) => {
console.log(`Документ ${index + 1}: ${результат.insertedIds[key]}`);
});
} finally {
await client.close();
}
}
main().catch(console.error);
Результат выполнения:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 6678e30e80ac30e5e689f13a
文档 2: 6678e30e80ac30e5e689f13b
文档 3: 6678e30e80ac30e5e689f13c
Запрос данных
Вы можете использовать find() для поиска данных. find() может возвращать все данные, соответствующие условиям.
Если условия не указаны, find() возвращает все данные в коллекции.
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Коллекция ${collectionName}успешно создана`);
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}создано новых документов,ID: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`Документ ${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("Найденные документы:");
console.log(allValues);
} finally {
await client.close();
}
}
main().catch(console.error);
Результат выполнения:
成功连接到服务器
集合 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' }
]
Следующий пример извлекает экземпляры, где name — "Alice":
Запрос данных с указанными условиями
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`Коллекция ${collectionName}успешно создана`);
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}создан новый документ (документы),IDкак: `);
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("Найденные документы:");
console.log(allValues);
} finally {
await client.close();
}
}
main().catch(console.error);
Результат выполнения следующей команды:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
查询到的文档:
[
{ name: 'Alice', age: 25, address: 'Wonderland' }
]
Обновление данных
Мы также можем изменять данные в базе данных. Следующий пример обновит данные, где name имеет значение 'Alice':
Обновить один документ
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}created successfully`);
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}создан новый документ (документы),IDкак: `);
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) matched the filter criteria`);
console.log(`${updateResult.modifiedCount}document(s) have been updated`);
const updatedDocument = await collection.findOne(filter);
console.log("Обновленные документы:");
console.log(updatedDocument);
} finally {
await client.close();
}
}
main().catch(console.error);
После успешного выполнения вывод будет следующим:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
1 个文档匹配筛选条件
1 个文档已更新
更新后的文档:
{
_id: new ObjectId('6678e1d1f9503dc2e0e2a20b'),
name: 'Alice',
age: 28,
address: 'New Wonderland'
}
Если вы хотите обновить все документы, соответствующие критериям, можно использоватьupdateMany():
Обновление нескольких документов
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}created successfully`);
const collection = database.collection(collectionName);
const docs = [
{ name: "Alice", age: 25, address: "Wonderland" },
{ name: "Bob", age: 30, address: "Builderland" },
{ name: "Alice", age: 28, address: "Old Wonderland" }
];
const result = await collection.insertMany(docs);
console.log(`${result.insertedCount}создан новый документ (документы),IDкак: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const filter = { name: "Alice" };
const updateDoc = {
$set: {
address: "Updated Wonderland"
},
};
const updateResult = await collection.updateMany(filter, updateDoc);
console.log(`${updateResult.matchedCount}document(s) matched the filter criteria`);
console.log(`${updateResult.modifiedCount}document(s) have been updated`);
const updatedDocuments = await collection.find(filter).toArray();
console.log("Обновленные документы:");
console.log(updatedDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Удаление данных
Следующий пример удаляет данные, где name равно 'Alice':
Удаление одного документа
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}created successfully`);
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}создан новый документ (документы),IDкак: `);
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}документ(ы) были удалены`);
const remainingDocuments = await collection.find({}).toArray();
console.log("Оставшиеся документы:");
console.log(remainingDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
После успешного выполнения вывод:
成功连接到服务器
集合 exampleCollection 创建成功
3 个新文档已创建,ID 为:
文档 1: 0
文档 2: 1
文档 3: 2
1 个文档已删除
剩余的文档:
[
{
_id: new ObjectId('6678e18e0bb3f4247be610d8'),
name: 'Example',
type: 'Test'
},
...
Если вы хотите удалить несколько документов, вы можете использоватьdeleteMany()метод
Следующий пример удаляет все данные, где type равно 'en':
Удаление нескольких документов
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}created successfully`);
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}создан новый документ (документы),IDкак: `);
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}документ(ы) были удалены`);
const remainingDocuments = await collection.find({}).toArray();
console.log("Оставшиеся документы:");
console.log(remainingDocuments);
} finally {
await client.close();
}
}
main().catch(console.error);
Sort
Сортировка использует метод sort(), который принимает один параметр, указывающий, является ли порядок возрастающим (1) или убывающим (-1).
Например:
{ type: 1 } // 按 type 字段升序
{ type: -1 } // 按 type 字段降序
Сортировка по type по возрастанию:
Сортировка
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}created successfully`);
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}создан новый документ (документы),IDкак: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const sortedDocsAsc = await collection.find().sort({ age: 1 }).toArray();
console.log("Документы, отсортированные по полю age по возрастанию:");
console.log(sortedDocsAsc);
const sortedDocsDesc = await collection.find().sort({ age: -1 }).toArray();
console.log("Документы, отсортированные по полю age в порядке убывания:");
console.log(sortedDocsDesc);
} finally {
await client.close();
}
}
main().catch(console.error);
Пагинация запросов
Если вы хотите задать количество возвращаемых документов, можно использоватьlimit()метод, который принимает только один параметр, задающий количество возвращаемых документов.
limit(): Чтение двух документов
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}created successfully`);
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}создан новый документ (документы),IDкак: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const limitedDocs = await collection.find().limit(3).toArray();
console.log("Ограничение результатов запроса до 3 документов:");
console.log(limitedDocs);
} finally {
await client.close();
}
}
main().catch(console.error);
Если вы хотите указать количество документов для пропуска, можно использовать методskip().
Метод skip() используется для пропуска указанного количества документов и возврата результатов запроса оставшихся документов.
skip(): пропустить первые два документа и прочитать два документа
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("Успешно подключено к серверу");
const database = client.db('example');
const collectionName = 'exampleCollection';
await database.createCollection(collectionName);
console.log(`collection ${collectionName}created successfully`);
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}создан новый документ (документы),IDкак: `);
Object.keys(result.insertedIds).forEach((id, index) => {
console.log(`document ${index + 1}: ${id}`);
});
const skippedDocs = await collection.find().skip(2).toArray();
console.log("Результаты запроса после пропуска первых двух документов:");
console.log(skippedDocs);
} finally {
await client.close();
}
}
main().catch(console.error);
Операция подключения
MongoDB не является реляционной базой данных, но мы можем использовать$lookupдля реализации левого соединения.
$lookup — это оператор конвейера агрегации в MongoDB, используемый для выполнения левых внешних соединений. Его можно использовать для поиска документов в одной коллекции, которые соответствуют условиям в другой коллекции, и объединения их вместе.
Например, у нас есть две коллекции со следующими данными:
Коллекция 1: orders
[
{ "_id": 1, "product_id": 101, "quantity": 2 },
{ "_id": 2, "product_id": 102, "quantity": 1 },
{ "_id": 3, "product_id": 103, "quantity": 4 }
]
Коллекция 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 }
]
Теперь мы хотим использовать операцию $lookup, чтобы связать поле product_id в коллекции orders с полем _id в коллекции products и получить подробную информацию о товаре для каждого заказа.
Ниже приведён пример агрегации MongoDB, реализующий эту функциональность:
Пример
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("Успешно подключено к серверу");
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("Результаты запроса левого внешнего соединения:");
console.log(result);
} finally {
await client.close();
}
}
main().catch(console.error);
Удаление коллекции
Мы можем использоватьdrop()метод для удаления коллекции:
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("Коллекция удалена");
db.close();
});
});
Использование Promise
Promise — это класс, предоставляемый ECMAScript 6, предназначенный для более элегантного написания сложных асинхронных задач.
Если вы ещё не понимаете Promise, можете обратиться кJavaScript Promise。
В следующем примере Promise используется для создания коллекции:
Пример
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("Успешно подключено к серверу MongoDB");
resolve(client.db());
}
});
});
}
connectDB()
.then(database => {
console.log("Успешно подключено к базе данных");
console.log("Имя базы данных:", database.databaseName);
client.close();
})
.catch(err => {
console.error("Произошла ошибка при подключении к базе данных:", err);
});
Операции с данными через Promise
Теперь давайте реализуем четыре последовательные операции в одной программе: добавление, запрос, обновление и удаление.
Пример
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("Успешно подключено к серверу 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("Документ успешно добавлен");
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("Результат запроса документов:");
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("Документ успешно обновлён");
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("Документ успешно удалён");
resolve(result);
}
});
});
}
async function performOperations() {
try {
const database = await connectDB();
const insertResult = await insertDocument(database, { name: "Документ 1" });
const findResult = await findDocuments(database);
const updatedDocId = insertResult.insertedId;
const updateResult = await updateDocument(database, updatedDocId, { name: "Обновлённый документ 1" });
const deleteResult = await deleteDocument(database, updatedDocId);
console.log("Финальная операция завершена:");
console.log("Результат удаления документа:", deleteResult);
} catch (err) {
console.error("Произошла ошибка при выполнении операции:", err);
} finally {
await client.close();
}
}
performOperations();
Результат выполнения:
数据库已连接
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[ { _id: 5f1664966833e531d83d3ac6, site: 'example.com' } ]
[]
Другие расширения