Du kan bruge mongoose-mpath pakke for at skabe træhierarki.
Her er trinene:
1-) Opret et kategoriskema ved hjælp af dette plugin.
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-) post rute for at indsætte kategorier med 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);
});
Brug denne rute til at oprette kategorierne med postbud:
Root Kategori:(det er godt at have en ROT-kategori, root har ingen forælder)
{
"name": "ROOT"
}
Svaret vil være som dette:(som du ser, tilføjede dette plugin et stifelt internt for at opretholde hierarki)
{
"_id": "5dd95adf997fc53e1ce944a7",
"name": "ROOT",
"path": "5dd95adf997fc53e1ce944a7",
"__v": 0
}
Cat1-kategori:(bemærk, at vi sætter overordnet felt til rodkategori-id'et, som er 5dd95adf997fc53e1ce944a7)
{
"name": "Cat1",
"parent": "5dd95adf997fc53e1ce944a7"
}
Resultat for Cat1:
{
"_id": "5dd95b21997fc53e1ce944a8",
"name": "Cat1",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b21997fc53e1ce944a8",
"__v": 0
}
Cat11-kategori:(bemærk, at vi indstiller overordnet felt til Cat1-id'et, som er 5dd95adf997fc53e1ce944a7)
{
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7"
}
Resultat for Cat11:
{
"_id": "5dd95b8e997fc53e1ce944aa",
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
"__v": 0
}
Og for at finde en kategori efter navn, kan du bruge følgende get-rute:(Jeg har hårdt kodet kategorinavn for nemheds skyld, du kan tage kategorinavn fra req.body eller req.query)
router.get("/", async (req, res) => {
let category = await Category.findOne({
name: "Cat11"
});
res.status(200).send(category);
});
Dette vil returnere Cat11 kategoridokumentet som dette:
{
"_id": "5dd95b8e997fc53e1ce944aa",
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
"__v": 0
}
Og hvis du vil have børnekategorierne for den fundne kategori, kan du prøve mongoose-mpath
metoder som getChildrenTree.