إدراج المستندات
جزء من قسم قواعد البيانات باستخدام 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 فتأخذ وثيقة واحدة. وكلاهما عمليتا كتابة غير متزامنتين.
التحدي
سهليمكن للعملاء الآن إضافة الكتب. خزّن الكتاب الذي يرسله العميل، ثم أرسله إليه مجددًا مع معرّفه الجديد.
- في
server.js، أضف مسارPOST /booksأسفلGET /books. - يخزّن هذا المسار جسم JSON كمستند جديد في مجموعة
books. - يردّ برمز الحالة 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