ჯავასკრიპტი - სქემის შექმნა Node/MongoDb-ში
აქედან გამომდინარე, მე დავიწყე Node/Mongo db და typescript-ის სწავლა, და ცოტა ჩავივარდი ამ ნესტედ JSON მონაცემთა ბაზისთვის სქემის შექმნით. მე რაღაც გავიგე და მსურს გავიგო, ვარ თუ არა სწორი გზით. ამიტომ, თუ ვინმე დაგვეხმარება, ეს შესანიშნავი იქნება. წინასწარ მადლობა
მონაცემები
[{
"a_class":[
{
"brand":"A-class",
"id":"1",
"year":"2015"
"price":"12665"
...
"engine_spec":{
...
}
...
}]
}
]
ინტერფეისები
import { Document } from 'mongoose';
export default interface ICars extends Document {
a_class: BrandList[],
}
interface BrandList {
brand: string;
id:number;
year:number;
main_image: string;
price:number;
transmission:string;
fuel_type:string;
seating_capacity:number;
engine:number;
engine_specs:Specs;
volume_weights:Volume;
performance: Performance
images_interior: Interior
images_exterior: Exterior
}
interface Specs {
power:number;
power_per_litre:number;
torque:number;
fuel_system:number
}
interface Volume {
max_weights:number;
fuel_tank:number
}
interface Performance {
acceleration:number;
maximum_speed:number;
fuel_urban:number;
fuel_extra_urban:number
fuel_combined:number
}
interface Interior {
image_one:string;
image_two:string;
image_three:string;
image_four:string;
}
interface Exterior {
image_one:string;
image_two:string;
image_three:string;
image_four:string;
}
სქემა
import mongoose, { Schema } from 'mongoose';
import ICars from '../interfaces/cars'
const CarsSchema: Schema = new Schema({
a_class:Array,
brand: String,
year:Number,
})
export default mongoose.model<ICars>('Cars', CarsSchema);
მიიღეთ მარშრუტი, ასე რომ, როდესაც ვცდილობ დავამატო ყველა ინფორმაცია Postman-ის საშუალებით, ამის დაშვება არ ხდება, ეუბნება, რომ მარშრუტი ვერ მოიძებნა 404. მე შევიტანე ის server.js-ში import carsRouter from './routes/cars'; router.use('./cars',carsRouter ), არ ვიცი სად შეიძლება იყოს შეცდომა
import express from 'express'
import Cars from '../models/cars'
const router = express();
router.get('/cars', (req:any, res:any )=>{
Cars.find()
.then(car=> res.json(car))
.catch(err => res.status(400).json(`Error: ${err}`))
})
export=router
უპასუხე #1
მონგუზის დოკუმენტის მიხედვით, ჩვენ უნდა ავუცილოთ mongoose Document-ის გახანგრძლივება.
ეს მიდგომა მუშაობს, მაგრამ ჩვენ გირჩევთ, რომ თქვენი დოკუმენტის ინტერფეისი არ გახდეს Document-ის გაფართოება. Document-ის გაფართოება სირთულეს ქმნის Mongoose-ისთვის იმის გაგებაში, რომელი თვისებები არსებობს query ფილტრებზე, lean დოკუმენტებსა და სხვა შემთხვევებში.
ჩვენ გირჩევთ, თქვენი დოკუმენტის ინტერფეისი შეიცავდეს მახასიათებლებს, რომლებიც განსაზღვრულია თქვენს სქემაში და ემთხვევა იმას, როგორ გამოიყურება თქვენი დოკუმენტები MongoDB-ში. მიუხედავად იმისა, რომ შეგიძლიათ დაამატოთ ინსთანსის მეთოდები თქვენს დოკუმენტის ინტერფეისში, ჩვენ არ გირჩევთ ამის გაკეთებას.
მეტი ინფორმაციისათვის, გთხოვთ გადახედოთ: https://mongoosejs.com/docs/typescript.html#using-extends-document
და ჩანს, რომ ჩვენ შეგვიძლია გამოვიყენოთ mongoose-ის სუბდოკუმენტები ამ მოთხოვნისათვის. სუბდოკუმენტების შესახებ დამატებითი ინფორმაციისთვის, გთხოვთ იხილოთ: https://mongoosejs.com/docs/subdocs.html#subdocuments
თუმცა, ამ შემთხვევაში, შეგვიძლია ცოტა შევცვალოთ შენი კოდი:
ინტერფეისები :
export default interface ICars {
a_class: BrandList[],
}
// The other interfaces can be kept
სქემა :
const Exterior = new Schema({
// own fields
});
const Interior = new Schema({
// own fields
});
const Performance = new Schema({
// own fields
});
const Volume = new Schema({
// own fields
});
const SpecsSchema = new Schema({
// own fields
});
const BrandListSchema = new Schema({
// other fields
engine_specs: [SpecsSchema],
volume_weights: [VolumeSchema],
performance: [PerformanceSchema],
images_interior: [InteriorSchema],
images_exterior: [ExteriorSchema],
});
const CarsSchema: Schema = new Schema({
a_class: [BrandListSchema],
});
