MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Запитване за масиви от вложени обекти

Можете да използвате mongoose-mpath пакет за създаване на дървовидна йерархия.

Ето стъпките:

1-) Създайте схема на категория с помощта на този плъгин.

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-) публикувайте маршрут за вмъкване на категории с йерархия:

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);
});

Използвайки този маршрут, създайте категориите с пощальон:

Основна категория:(добре е да имате ROOT категория, root няма родител)

{
    "name": "ROOT"
}

Отговорът ще бъде като този:(както виждате, този плъгин добави вътрешно поле за път, за да поддържа йерархия)

{
    "_id": "5dd95adf997fc53e1ce944a7",
    "name": "ROOT",
    "path": "5dd95adf997fc53e1ce944a7",
    "__v": 0
}

Категория Cat1:(обърнете внимание, че задаваме родителското поле на идентификатора на основната категория, който е 5dd95adf997fc53e1ce944a7)

{
    "name": "Cat1",
    "parent": "5dd95adf997fc53e1ce944a7"
}

Резултат за Cat1:

{
    "_id": "5dd95b21997fc53e1ce944a8",
    "name": "Cat1",
    "parent": "5dd95adf997fc53e1ce944a7",
    "path": "5dd95adf997fc53e1ce944a7#5dd95b21997fc53e1ce944a8",
    "__v": 0
}

Категория Cat11:(обърнете внимание, че задаваме родителско поле на идентификатора на Cat1, който е 5dd95adf997fc53e1ce944a7)

{
    "name": "Cat11",
    "parent": "5dd95adf997fc53e1ce944a7"
}

Резултат за Cat11:

{
    "_id": "5dd95b8e997fc53e1ce944aa",
    "name": "Cat11",
    "parent": "5dd95adf997fc53e1ce944a7",
    "path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
    "__v": 0
}

И за да намерите категория по име, можете да използвате следния маршрут за получаване:(твърдо кодирах име на категория за простота, можете да вземете име на категория от req.body или req.query)

router.get("/", async (req, res) => {
  let category = await Category.findOne({
    name: "Cat11" 
  });

  res.status(200).send(category);
});

Това ще ви върне документа за категория Cat11 по следния начин:

{
    "_id": "5dd95b8e997fc53e1ce944aa",
    "name": "Cat11",
    "parent": "5dd95adf997fc53e1ce944a7",
    "path": "5dd95adf997fc53e1ce944a7#5dd95b8e997fc53e1ce944aa",
    "__v": 0
}

И ако искате да получите детските категории на намерената категория, можете да опитате mongoose-mpath методи като getChildrenTree.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. когато премахнете документ от ограничена колекция в mongoDB, то чрез грешка?

  2. Spring Boot Data и MongoDB - Filter Subdocument Array Query

  3. Как да открия дали сериализатор на mongodb вече е регистриран?

  4. Редактирането в mongodb ми се струва неясно

  5. Обработка на изчаквания с Node.js и mongodb