Menu
CoddyTech

إدراج المستندات

جزء من قسم قواعد البيانات باستخدام MongoDB في رحلة Node.js على Coddy. الدرس 5 من 29.

يرسل العميل كتابًا جديدًا في متن طلب POST، وعلى الخادم تخزينه وإخبار العميل بما خزّنه.

لكل وثيقة حقل _id، وهو مفتاحها الفريد في المجموعة. عندما لا يحتوي الكائن الذي تُدرجه على هذا الحقل، تنشئه insertOne وتكتبه أيضًا في الكائن نفسه. لا يعيد الاستدعاء سوى acknowledged وinsertedId، ولا يعيد الوثيقة مطلقًا. insertedId هو ObjectId، وهو نوع المعرّف الذي ينشئه MongoDB. يوضّح البحث باستخدام ObjectId ذلك.

const movie = { title: 'Alien', year: 1979 };
const result = await movies.insertOne(movie);

console.log(result);    // { acknowledged: true, insertedId: new ObjectId('66f1...') }
console.log(movie._id); // المعرّف نفسه

لذلك، بعد الإدراج، يكون الكائن الذي مرّرته هو الوثيقة المخزّنة، بما في ذلك _id: وهذا ما يريد العميل استعادته.

تُدرج البيانات الأولية ثلاثة كتب باستخدام insertMany، التي تأخذ مصفوفة من الوثائق. أما insertOne فتأخذ وثيقة واحدة. وكلاهما عمليتا كتابة غير متزامنتين.

challenge icon

التحدي

سهل

يمكن للعملاء الآن إضافة الكتب. خزّن الكتاب الذي يرسله العميل، ثم أرسله إليه مجددًا مع معرّفه الجديد.

  1. في server.js، أضف مسار POST /books أسفل GET /books.
  2. يخزّن هذا المسار جسم JSON كمستند جديد في مجموعة books.
  3. يردّ برمز الحالة 201 والكتاب كما خُزّن، بما في ذلك _id الذي أنشأه MongoDB. بالنسبة إلى الجسم في «جرّبها»، تكون الاستجابة كما يلي:
    { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary", "_id": "6720a1f4c2b9e81d3a5f0c14" }
    ستكون قيمة _id لديك مختلفة. لا يهم ترتيب الحقول. جرّبها: أرسل POST /books مع هذا الجسم: { "title": "Beloved", "author": "Toni Morrison", "year": 1987, "isbn": "9781400033416", "genre": "literary" }. ستحصل على 201 والكتاب مع _id. أرسل GET /books: ستحصل على أربعة كتب، ويكون Beloved الأخير. تعرض علامة التبويب «البيانات» أربعة مستندات في books. اضغط «تشغيل» مرة أخرى، وسيختفي Beloved. يبدأ كل تشغيل بقاعدة بيانات فارغة، ويخزّن المشروع الابتدائي الكتب الثلاثة نفسها مجددًا.

جرّب بنفسك

import express from 'express';
import { MongoClient } from 'mongodb';

const client = new MongoClient('mongodb://localhost:27017');
const db = client.db('shelf');
const books = db.collection('books');

await books.insertMany([
    { title: 'Dune', author: 'Frank Herbert', year: 1965, isbn: '9780441013593', genre: 'scifi' },
    { title: 'Kindred', author: 'Octavia E. Butler', year: 1979, isbn: '9780807083697', genre: 'scifi' },
    { title: 'Emma', author: 'Jane Austen', year: 1815, isbn: '9780141439587', genre: 'classic' },
]);

const app = express();
app.use(express.json());

// كل خطأ يعيد { error: message }.
function sendError(res, status, message) {
    res.status(status).json({ error: message });
}

app.get('/', (req, res) => {
    res.send('Bookshelf API');
});

app.get('/books', async (req, res) => {
    const list = await books.find().toArray();
    res.json(list);
});

app.listen(3000, () => {
    console.log('Bookshelf is running on port 3000');
});

جميع دروس قواعد البيانات باستخدام MongoDB

تدرّب بنفسك: Playground لـ Express