sql >> Databáze >  >> NoSQL >> MongoDB

Dotazování na pole vnořených objektů

Můžete použít mongoose-mpath balíček pro vytvoření stromové hierarchie.

Zde jsou kroky:

1-) Vytvořte schéma kategorií pomocí tohoto pluginu.

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-) odeslat trasu pro vložení kategorií s hierarchií:

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

Pomocí této trasy vytvořte kategorie pomocí pošťák:

Root Category:(je dobré mít kategorii ROOT, root nemá rodiče)

{
    "name": "ROOT"
}

Odpověď bude tato:(jak vidíte, tento plugin interně přidal pole cesty, aby zachoval hierarchii)

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

Kategorie Cat1:(všimněte si, že jsme nastavili nadřazené pole na ID kořenové kategorie, které je 5dd95adf997fc53e1ce944a7)

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

Výsledek pro Cat1:

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

Kategorie Cat11:(všimněte si, že jsme nastavili nadřazené pole na ID Cat1, které je 5dd95adf997fc53e1ce944a7)

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

Výsledek pro Cat11:

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

A k vyhledání kategorie podle názvu můžete použít následující způsob získání:(Pro zjednodušení jsem pevně zakódoval název kategorie, název kategorie můžete převzít z req.body nebo req.query)

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

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

Toto vám vrátí dokument kategorie Cat11 takto:

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

A pokud chcete získat dětské kategorie nalezené kategorie, můžete zkusit mongoose-mpath metody jako getChildrenTree.



  1. Mongodb najít porovnání prvků pole

  2. konfigurace max. velikost starého prostoru v Nodejs

  3. Spring Data MongoDB eliminují POJO's

  4. Docker Redis Connection odmítl