MongoDB — это документная база данных NoSQL, в которой вы можете хранить свои данные в виде документа, похожего на JSON.
Используя Node.js и MongoDB, вы можете создать мощный бэкенд. Для этого вы знаете, как работает операция CRUD в MongoDB и Node.js.
Предпосылки:
- У вас есть базовые знания JavaScript.
- Установите node.js на свой компьютер
- Иметь учетную запись на MongoDB
Настройка проекта
Сначала вам нужно инициализировать проект и установить API драйвера MongoDB в ваше приложение. Поэтому запустите команду ниже в свой каталог, где вы можете инициализировать свой проект.
npm init npm install mongodb
Соединение с MongoDB
Теперь давайте начнем с подключения базы данных MongoDB к вашему приложению Node.js. Для этого создайте файл index.js в своем приложении и используйте этот код для подключения.
import { MongoClient } from "mongodb"; //Replace your connection string const uri = "<connection string uri>" const client = new MongoClient(uri); const operations = async () => { try { //database const db = client.db('my_db'); //collection or as we know as table const user = db.collection('users'); //You are to ready to perform CRUD operation here //insertOneUser(); //insertManyUser(); //findOneUser(); //findManyUser(); //updateOneUser(); //updateManyUser(); //deleteOneUser(); //deleteManyUser(); } finally { client.close(); } } operations().catch(error => console.log(error));
В приведенном выше коде, как вы можете видеть, мы подключаемся к клиенту MongoDB через URI подключения. Чтобы узнать, где вы можете найти этот URI, см. это.
Вставить операцию
Теперь давайте сначала создадим пользователя, используя методы insertOne() и insertMany() в нашей коллекции users. Таким образом, вы можете создать функцию и вызвать ее в нашей функции операций.
//Inserting one user at a time const insertOneUser = async (users) => { try { const query = { name: 'Fake user 1', email: '[email protected]', password:'$dfferiuy37653298734jhrfkudshsdf' } const user = await users.insertOne(query); //Console our newly created user console.log(user); } catch (error) { console.log(error); } } //Insert many user at a time const insertManyUser = async (users) => { try { const query = [ { name: 'John Deo 1', email: '[email protected]', password:'$dfferiuy37653298734jhrfkudshsdf' }, { name: 'John Deo 2', email: '[email protected]', password:'$dfferiuy37653298734jhrfkudshsdf' }, { name: 'John Deo 3', email: '[email protected]', password:'$dfferiuy37653298734jhrfkudshsdf' } ]; //ordered simply continue insert document if one is fail to insert const options = { ordered: true} const result = await users.insertMany(query, options); // console.log(result); } catch (error) { console.log(error); } }
Здесь функция insertOne() вставляет только один документ за раз, а функция insertMany() вставляет сразу несколько документов. После вставки вашего документа вы можете увидеть свой документ в своей базе данных MongoDB, а вывод в консоли выглядит так, как показано ниже.
//For insertOne() method { acknowledged: true, insertedId: new ObjectId("6415b7861b4130f29a70f42a") } //For insertMany Method { acknowledged: true, insertedCount: 3, insertedIds: { '0': new ObjectId("6415b81d6318d11966aae6f6"), '1': new ObjectId("6415b81d6318d11966aae6f7"), '2': new ObjectId("6415b81d6318d11966aae6f8") } }
Поздравляем! Вы завершили операцию создания! .
Операция чтения
Теперь давайте прочитаем этот документ, который мы только что создали. Для этого мы можем использовать методы find() и findOne().
Из его названия можно догадаться, что он находит много документов в случае метода find() и один документ в случае findOne( ) из коллекции документов, соответствующих запросу.
//find one user from collection const findOneUser = async (users) => { try { //find by user email const query = { email: '[email protected]'}; const user = await users.findOne(query); console.log(user); } catch (error) { console.log(error); } } //find all user const findManyUser = async (users) => { try { //find all user which contain a string 'john_deo_' in it's email const query = { email: { $regex: new RegExp('john_deo_') } }; const result = await users.find(query); await result.forEach(user => { console.log(user); }); } finally { client.close(); } }
Итак, здесь он извлекает документ на основе совпадения запроса. Если в методе findOne() имеется более одного документа, соответствующего запросу, он просто возвращает первый документ.
//findOne() method output { _id: new ObjectId("6415b7861b4130f29a70f42a"), name: 'Fake user 1', email: '[email protected]', password: '$dfferiuy37653298734jhrfkudshsdf' } //find() method output { _id: new ObjectId("6415b81d6318d11966aae6f6"), name: 'John Deo 1', email: '[email protected]', password: '$dfferiuy37653298734jhrfkudshsdf' } { _id: new ObjectId("6415b81d6318d11966aae6f7"), name: 'John Deo 2', email: '[email protected]', password: '$dfferiuy37653298734jhrfkudshsdf' } { _id: new ObjectId("6415b81d6318d11966aae6f8"), name: 'John Deo 3', email: '[email protected]', password: '$dfferiuy37653298734jhrfkudshsdf' }
Поздравляем, вы также завершили операцию чтения! .
Операция обновления
Теперь давайте обсудим операцию обновления. Здесь также есть два метода updateOne() и updateMany(). Итак, я знаю, что вы настолько умны, что правильно догадываетесь, как это работает. Метод updateOne() обновляет только один документ, тогда как метод updateMany() обновляет множество документов, соответствующих запросу.
//Update one user const updateOneUser = async (users) => { try { const query = { email: '[email protected]' }; //this will create new document if not document match with query const options = { upsert: true } const updateDoc = { $set: { name: 'Fake User Update' } } const doc = await users.updateOne(query, updateDoc, options); console.log(doc); } catch (error) { console.log(error); } } //Update Many User const updateManyUser = async () => { try { const query = { email: { $regex: new RegExp('john_deo_') } }; const updateDoc = { $set: { name: 'John_Deo_Update' } } const doc = await users.updateMany(query, updateDoc); console.log(doc); } catch (error) { console.log(error); } }
Теперь здесь он соответствует запросу, и соответствующий документ обновляется.
//Update one User { acknowledged: true, modifiedCount: 1, upsertedId: null, upsertedCount: 0, matchedCount: 1 } //Update Many User { acknowledged: true, modifiedCount: 3, upsertedId: null, upsertedCount: 0, matchedCount: 3 }
Поздравляем, вы также завершили операцию обновления! .
Удалить операцию
Теперь, наконец, давайте обсудим операцию удаления. Для удаления документа используйте метод delete() и метод deleteMany().
//Delete one User const deleteOneUser = async (users) => { try { const query = { email: '[email protected]' }; const result = await users.deleteOne(query); console.log(result); } catch(error) { console.log(error); } } //Delete Many User const deleteManyUser = async (users) => { try { const query = { email: { $regex: new RegExp('john_deo_') } }; const result = await users.deleteMany(query); console.log(result); } catch (error) { console.log(error); } }
Как вы знаете, он соответствует запросу и удаляет документ, который соответствует нашему запросу. Если вы используете метод deleteMany(), используйте его с осторожностью, потому что если мы укажем { } в качестве запроса, он удалит весь документ из коллекции.
//Delete one user { acknowledged: true, deletedCount: 1 } //Delete many user { acknowledged: true, deletedCount: 3 }
Еще раз поздравляем, вы прошли все четыре операции Create, Read, Update и Delete.
Заключение
Если вы знаете основы работы с MongoDB и Node.js, вы можете приступить к созданию некоторого API. Я надеюсь, что эта статья поможет вам понять, как работают операции CRUD в Node.js.