У меня есть две модели.
Как:
const mongoose = require('mongoose')
const Schema = mongoose.Schema
let Like = new Schema({
value: {
type: Number
}
}, { timestamps: true })
module.exports = mongoose.model('Like', Like)
И
Доклад:
const mongoose = require('mongoose')
const Schema = mongoose.Schema
let Report = new Schema({
title: {
type: String
},
summary: {
type: String
},
analysis: {
type: String
},
source_title: {
type: String
},
source_link: {
type: String
},
author: {
type: String
},
like: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'Like'
},
player: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'Player'
}
}, { timestamps: true })
module.exports = mongoose.model('Report', Report)
У меня две цели:
- Я хочу иметь возможность отслеживать каждое подобное и связывать их с отчетом.
- Я хочу, чтобы на этом маршруте мог быть отчет как json.
const express = require('express')
const reportRoutes = express.Router()
let Report = require('../models/Report')
reportRoutes.get('/', async (req, res) => {
try {
const report = await Report.find()
.populate({path: 'like'})
.populate({
path : 'player',
populate: [
{ path: 'team' }
]
})
res.json(report)
} catch (e) {
res.status(500).send()
}
})
reportRoutes.route('/:id').get(async (req, res) => {
let id = req.params.id
Report.findById(id, function(err, report){
res.json(report)
})
})
reportRoutes.route('/add').post(function(req, res){
let report = new Report(req.body)
report.save()
.then(report => {
res.status(200).json({'report': 'report added successfully!'})
})
.catch(err => {
res.status(400).send('adding new report failed :(')
})
})
reportRoutes.route('/update/:id').post(function(req, res){
Report.findById(req.params.id, function(err, report) {
if (!report)
res.status(404).send('data is not found')
else
report.title = req.body.title
report.desc = req.body.desc
report.markdown = req.body.markdown
report.save().then(report => {
res.json('Report updated!!!')
})
.catch(err => {
res.status(400).send('Update didnt work')
})
})
})
module.exports = reportRoutes
Способ, которым это в настоящее время настроено, работает, ОДНАКО, я чувствую, что есть определенное ограничение.
Каждый раз, когда я создаю лайк для отчета, мне также необходимо обновлять отчет, чтобы добавить идентификатор для конкретного лайка.
Полагаю, есть гораздо лучший способ сделать это. Мой опыт работы с Rails и Posgresql, поэтому Mongo / Mongoose немного меня отталкивает.