Обратите внимание, я новый кодер.
Я не знаю, как эффективно создавать данные в Монго, поэтому я могу использовать их и сравнивать с течением времени.
Я создаю панель администратора, где собираю данные из HTML и храню в коллекциях Mongo и определенных схемах.Данные преобразуются в графики для просмотра пользователем.
Теперь я собираю данные за этот год.В следующем году я соберу точные или почти точные данные.
Тогда я хочу создать сравнения.
Я изначально думал о создании НЕСКОЛЬКИХ моделей для дифференциации.
так из моего кода ниже:
модель этого года будет 2019manageSchema .... а модель следующего года будет 2020manageSchema ... но схемы будут точно такими же, как и ясобирать те же данные.
Но я не думаю, что это лучшая практика.
Кроме того, я думаю, что на маршрутах было бы хаосом требовать, чтобы все mdoels проходили через каждый маршрут..
Режим
var mongoose = require("mongoose"),
math = require('mathjs');
*****DATABASE CONFIG*******
var manageSchema = new mongoose.Schema({
period: String,
managers: Number,
staffs: Number,
staffcosts: Number,
headcountavg: Number,
frontliners: Number,
supportfunc: Number,
depthratio: Number,
totalrevenue: Number,
grossprofit: Number,
noofworkdays: Number,
sickleavestaken: Number,
unauthleavestaken: Number,
authleavestaken: Number,
eesmanagerscoreprev: Number,
eesmanagerscore: Number,
eesrecognitionscoreprev: Number,
eesrecognitionscore: Number,
created: {type: Date, default: Date.now},
user: {
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User"
},
username: String
}
});
module.exports = mongoose.model("Manage", manageSchema);
ROutes:
var express = require("express");
var router = express.Router();
var User = require("../models/user");
var Manage = require ("../models/manages");
//Manage
//Index Route for manage - view graphs + edit
router.get("/manage", isLoggedIn, function(req, res){
Manage.find({}, function(err, manages){
if(err){
console.log("ERROR");
} else {
res.render("manage", {manages: manages});
}
});
});
//NEW ROUTE - sends to forms page for Manage
router.get("/manage/new_admin0", isLoggedIn, function(req, res){
res.render("manageForm");
});
//CREATE ROUTE - POST request to manage
router.post("/manage", isLoggedIn, function (req, res){
//create demog
Manage.create(req.body.manage, function(err, newManage){
if(err){
console.log(err);
} else {
//add username and id to recruit
newManage.user.id = req.user._id;
newManage.user.username = req.user.username;
//save recruit
newManage.save();
//redirect
console.log(newManage);
res.redirect("/manage");
}
});
});
//SHOW ROUTE - Specific info
router.get ("/manage/:id", checkOwnership, function(req, res){
Manage.findById(req.params.id, function(err, foundManage){
if(err){
res.redirect("back");
} else {
res.render("showmanage", {manages: foundManage});
}
});
});
// EDIT ROUTE - form to update existing data
router.get("/manage/:id/edit", checkOwnership, function(req, res){
Manage.findById(req.params.id, function(err, foundManage){
res.render("editmanage", {manages: foundManage});
});
});
//UPDATE ROUTE - use edit form info and update existing data
router.put("/manage/:id", checkOwnership, function(req, res){
Manage.findByIdAndUpdate(req.params.id, req.body.manage, function(err, updateManage){
if(err){
res.redirect("back");
} else {
res.redirect("/manage/" + req.params.id);
}
});
});
//middleware
function isLoggedIn(req, res, next){
if(req.isAuthenticated()){
return next();
}
res.redirect("/login");
}
function checkOwnership(req, res, next) {
if(req.isAuthenticated()){
Manage.findById(req.params.id, function(err, foundManage){
if(err){
res.redirect("back");
} else {
//check if user own data
if(foundManage.user.id.equals(req.user._id)){
next();
} else {
res.redirect("back");
}
}
});
} else {
res.redirect("back");
}
}
module.exports = router;
Пожалуйста, помогите с хранением и в идеале, как хранить без влияния на текущие маршруты.