U kunt mongoose-mpath gebruiken pakket om een boomhiërarchie te maken.
Dit zijn de stappen:
1-) Maak een categorieschema met deze plug-in.
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 route om categorieën met hiërarchie in te voegen:
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);
});
Maak met behulp van deze route de categorieën met postbode:
Root-categorie:(het is goed om een ROOT-categorie te hebben, root heeft geen ouder)
{
"name": "ROOT"
}
Het antwoord is als volgt:(zoals je ziet heeft deze plug-in intern een padveld toegevoegd om de hiërarchie te behouden)
{
"_id": "5dd95adf997fc53e1ce944a7",
"name": "ROOT",
"path": "5dd95adf997fc53e1ce944a7",
"__v": 0
}
Cat1-categorie:(merk op dat we het bovenliggende veld instellen op de rootcategorie-ID die 5dd95adf997fc53e1ce944a7 is)
{
"name": "Cat1",
"parent": "5dd95adf997fc53e1ce944a7"
}
Resultaat voor Cat1:
{
"_id": "5dd95b21997fc53e1ce944a8",
"name": "Cat1",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b21997fc53e1ce944a8",
"__v": 0
}
Cat11-categorie:(merk op dat we het bovenliggende veld instellen op de Cat1-id die 5dd95adf997fc53e1ce944a7 is)
{
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7"
}
Resultaat voor Cat11:
{
"_id": "5dd95b8e997fc53e1ce944aa",
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
"__v": 0
}
En om een categorie op naam te vinden, kunt u de volgende get-route gebruiken:(Ik heb de categorienaam voor de eenvoud hard gecodeerd, u kunt de categorienaam uit req.body of req.query nemen)
router.get("/", async (req, res) => {
let category = await Category.findOne({
name: "Cat11"
});
res.status(200).send(category);
});
Hiermee krijgt u het Cat11-categoriedocument als volgt terug:
{
"_id": "5dd95b8e997fc53e1ce944aa",
"name": "Cat11",
"parent": "5dd95adf997fc53e1ce944a7",
"path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
"__v": 0
}
En als u de onderliggende categorieën van de gevonden categorie wilt krijgen, kunt u mongoose-mpath
proberen methoden zoals getChildrenTree.