Anda dapat menggunakan mongoose-mpath paket untuk membuat hierarki pohon.
Berikut langkah-langkahnya:
1-) Buat skema kategori menggunakan plugin ini.
const mongoose = require("mongoose");
const MpathPlugin = require("mongoose-mpath");
const schema = new mongoose.Schema({
name: {
type: String,
required: true
}
});
schema.plugin(MpathPlugin);
const Category = mongoose.model("Category", schema);
module.exports = { Category };
2-) posting rute untuk menyisipkan kategori dengan hierarki:
const express = require("express");
const router = express.Router();
const { Category } = require("../models/category");
router.post("/", async (req, res) => {
const { name, parent } = req.body;
const category = await Category.create({ name, parent });
res.status(201).send(category);
});
Dengan menggunakan rute ini, buat kategori dengan tukang pos:
Kategori Root:(baik untuk memiliki kategori ROOT, root tidak memiliki induk)
{
"name": "ROOT"
}
Responsnya akan seperti ini:(seperti yang Anda lihat plugin ini menambahkan bidang jalur secara internal untuk mempertahankan hierarki)
{
"_id": "5dd95adf997fc53e1ce944a7",
"name": "ROOT",
"path": "5dd95adf997fc53e1ce944a7",
"__v": 0
}
Kategori Cat1:(perhatikan bahwa kami menyetel bidang induk ke id kategori akar yaitu 5dd95adf997fc53e1ce944a7)
{
"name": "Cat1",
"parent": "5dd95adf997fc53e1ce944a7"
}
Hasil untuk Cat1:
{
"_id": "5dd95b21997fc53e1ce944a8",
"name": "Cat1",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b21997fc53e1ce944a8",
"__v": 0
}
Kategori Cat11:(perhatikan bahwa kami menyetel bidang induk ke id Cat1 yaitu 5dd95adf997fc53e1ce944a7)
{
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7"
}
Hasil untuk Cat11:
{
"_id": "5dd95b8e997fc53e1ce944aa",
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
"__v": 0
}
Dan untuk menemukan kategori berdasarkan nama, Anda dapat menggunakan rute get berikut:(Saya mengkodekan nama kategori untuk kesederhanaan, Anda dapat mengambil nama kategori dari req.body atau req.query)
router.get("/", async (req, res) => {
let category = await Category.findOne({
name: "Cat11"
});
res.status(200).send(category);
});
Ini akan mengembalikan Anda dokumen kategori Cat11 seperti ini:
{
"_id": "5dd95b8e997fc53e1ce944aa",
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
"__v": 0
}
Dan jika Anda ingin mendapatkan kategori anak-anak dari kategori yang ditemukan, Anda dapat mencoba mongoose-mpath
metode seperti getChildrenTree.