MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Odpytywanie zagnieżdżonych tablic obiektów

Możesz użyć mongoose-mpath pakiet do tworzenia hierarchii drzewa.

Oto kroki:

1-) Utwórz schemat kategorii za pomocą tej wtyczki.

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-) opublikuj trasę, aby wstawić kategorie z 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);
});

Korzystając z tej trasy, utwórz kategorie z listonoszem:

Kategoria root:(dobrze jest mieć kategorię ROOT, root nie ma rodzica)

{
    "name": "ROOT"
}

Odpowiedź będzie następująca:(jak widzisz, ta wtyczka dodała wewnętrznie pole ścieżki, aby zachować hierarchię)

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

Kategoria Cat1:(zauważ, że ustawiamy pole nadrzędne na identyfikator kategorii głównej, czyli 5dd95adf997fc53e1ce944a7)

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

Wynik dla kategorii 1:

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

Kategoria Cat11:(zwróć uwagę, że ustawiamy pole nadrzędne na identyfikator Cat1, który jest 5dd95adf997fc53e1ce944a7)

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

Wynik dla kategorii 11:

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

Aby znaleźć kategorię według nazwy, możesz użyć następującego polecenia get route:(dla uproszczenia zakodowałem nazwę kategorii, możesz pobrać nazwę kategorii z req.body lub req.query)

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

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

Spowoduje to zwrócenie dokumentu kategorii Cat11 w następujący sposób:

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

A jeśli chcesz uzyskać kategorie potomne znalezionej kategorii, możesz spróbować mongoose-mpath metody takie jak getChildrenTree.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring Data Mongo - zastosuj unikalne pola kombinacji w osadzonym dokumencie

  2. kontynuuj w kursorze.forEach()

  3. Opcje [useMongoClient] nie są obsługiwane

  4. Jak zainstalować MongoDB

  5. $ Composer nie może znaleźć rozszerzenia mongodb, wymagane rozszerzenie mongodb