Попытка использовать $ push в mongoose для добавления идентификатора в другую коллекцию - PullRequest
0 голосов
/ 17 мая 2019

Я хочу иметь возможность добавить идентификатор для лайка в отчет.

Это мой маршрут лайка, как / добавить, это рассматриваемый маршрут:

const express = require('express')
const likeRoutes = express.Router()
let Like = require('../models/Like')
let Report = require('../models/Report')


likeRoutes.route('/').get(function(req, res) {
    Like.find(function(err, like) {
        if (err) {
            console.log(err)
        } else {
            res.json(like)
        }
    })
})

likeRoutes.route('/:id').get(async (req, res) => {
    console.log(req.params.id)
    let id = req.params.id
    Like.findById(id, function(err, like){
        res.json(like)
    })
})

likeRoutes.route('/add').post(function(req, res){
    let like = new Like({
        value: req.body.value,
        _report: req.body._report
    })
    like.save((err, doc) => {
        if (err)
            res.send(err)
            console.log(req.body._report)
        Report.findOneAndUpdate(req.body._report,
            { $push: { like: doc._id} },
            { new: true , useFindAndModify: false},
            (err, post) => {
                if (err)
                    res.send(err)
                res.json({doc})
            }
        )
    })

})

likeRoutes.route('/update/:id').post(function(req, res){
    Like.findById(req.params.id, function(err, like) {
        if (!like)
            res.status(404).send('data is not found')
        else
            like.title = req.body.title
            like.desc = req.body.desc
            like.markdown = req.body.markdown

            like.save().then(like => {
                res.json('Like updated!!!')
            })
            .catch(err => {
                res.status(400).send('Update didnt work')
            })
    })
})

module.exports = likeRoutes

Этомоя модель отчета:

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,
        ref: 'Like'
    },
    player: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: 'Player'
    }
}, { timestamps: true })

module.exports = mongoose.model('Report', Report)

Это моя модель:

const mongoose = require('mongoose')
const Schema = mongoose.Schema

let Like = new Schema({
    value: {
        type: Number
    },
    _report: {
        type: String,
        ref: 'Report'
    }
}, { timestamps: true })

module.exports = mongoose.model('Like', Like)

Когда я пытаюсь добавить подобное в почтальоне, оно может быть создано.

Тем не менее, когда я просматриваю отчет по конкретным отметкам, подобного нет.

Я предполагаю, что это проблема с настройкой моей модели или маршрута.

Когда я console.log req.body._report, правильное значение приходит.

1 Ответ

0 голосов
/ 18 мая 2019

Мне не хотелось устанавливать массив в моей схеме отчета.$ push работает только в том случае, если схема, в которую вы вставляете, является массивом: https://docs.mongodb.com/manual/reference/operator/update/push/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...