MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Meminta array objek bersarang

Anda dapat menggunakan mongoose-mpath paket untuk membuat hierarki pohon.

Berikut langkah-langkahnya:

1-) Buat skema kategori menggunakan plugin ini.

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-) posting rute untuk menyisipkan kategori dengan 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);
});

Dengan menggunakan rute ini, buat kategori dengan tukang pos:

Kategori Root:(baik untuk memiliki kategori ROOT, root tidak memiliki induk)

{
    "name": "ROOT"
}

Responsnya akan seperti ini:(seperti yang Anda lihat plugin ini menambahkan bidang jalur secara internal untuk mempertahankan hierarki)

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

Kategori Cat1:(perhatikan bahwa kami menyetel bidang induk ke id kategori akar yaitu 5dd95adf997fc53e1ce944a7)

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

Hasil untuk Cat1:

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

Kategori Cat11:(perhatikan bahwa kami menyetel bidang induk ke id Cat1 yaitu 5dd95adf997fc53e1ce944a7)

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

Hasil untuk Cat11:

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

Dan untuk menemukan kategori berdasarkan nama, Anda dapat menggunakan rute get berikut:(Saya mengkodekan nama kategori untuk kesederhanaan, Anda dapat mengambil nama kategori dari req.body atau req.query)

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

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

Ini akan mengembalikan Anda dokumen kategori Cat11 seperti ini:

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

Dan jika Anda ingin mendapatkan kategori anak-anak dari kategori yang ditemukan, Anda dapat mencoba mongoose-mpath metode seperti getChildrenTree.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apa pro dan kontra untuk dokumen datar Embedded Arrays VS di mongodb?

  2. MongoDB Tampilkan semua konten dari semua koleksi

  3. Struktur aplikasi sinkron di Node.js dan MongoDb

  4. MongoDB - Perbedaan antara indeks pada bidang teks dan indeks teks?

  5. Bagaimana cara memperbarui objek tunggal dengan tambalan RESTHeart?