Как хранить и дифференцировать данные в MongoDB?

1

Обратите внимание, я новый кодер.

Я не знаю, как эффективно создавать данные в Монго, чтобы я мог использовать их и сравнивать с течением времени.

Я создаю панель администратора, где собираю данные из 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);

Трассы:


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;

Пожалуйста, помогите с хранением и в идеале, как хранить без ущерба для текущих маршрутов.

Теги:
express
mongoose

1 ответ

0

Вы можете сгруппировать данные, основываясь на дате, используя операторы агрегации конвейеров MongoDB, такие как, $year, $month, $week

{
    $project: {
        month: { $month: "$created" },
        year: { $year: "$created" },
    }
},
{
    $group: {
        _id: {
            year: '$year',
            month: '$month'
        },
        count: {
            $sum: 1
        }
    }
}

Проверьте ссылку ниже, которая поможет вам построить запрос,

  • 0
    Спасибо! Тогда как мне получить данные и передать их?
  • 0
    Какие данные вам нужно передать?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню