Мангуста самый современный способ сохранить и заполнить вложенные документы - PullRequest
0 голосов
/ 05 марта 2019

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

Моя проблема в том, что я не могу заставить его работать каким-либо другим способом, кроме этого, и я надеялся тамбыло что-то немного чище, так как мои данные в конечном итоге вложат несколько слоев.

Мои модели:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const BattletagSchema = new Schema({
    battletag: {
        type: String,
        required: true
    },
});

const UserSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    date: {
        type: Date,
        default: Date.now
    },
    battletags: [{type: Schema.Types.ObjectId, ref: 'battletags'}]
});

const Battletag = mongoose.model('battletags', BattletagSchema);
const User = mongoose.model('users', UserSchema);

module.exports = {Battletag, User};

Мой контроллер:

const validateBattletagInput = require('../../validation/battletag');
const Battletag = require('../../models/Battletag');
const User = require('../../models/User');

const battletagController = {
    addTag: (req, res) => {
        const {
            errors,
            isValid
        } = validateBattletagInput(req.body);
        if (!isValid) {
            return res.status(400).json(errors);
        };
        const newBattletag = new Battletag({
            battletag: req.body.battletag
        });
        newBattletag.save();
        User.findByIdAndUpdate(req.body.userId, {
            $push: {
                battletags: newBattletag._id
            }
        }, {
            new: true
        }).
        populate('battletags').
        then(response => {
            res.json(response);
        });
    },
    removeTag: (req, res) => {

    }
}
module.exports = battletagController;

Короче говоря,это работает.Однако я хотел бы очистить его и, возможно, не нужно сохранять поддельный документ, запрашивать пользователя, затем выдвигать новый поддельный документ, возвращать новую копию, а затем заполнять.Есть ли в мангусте какой-нибудь метод, который более эффективен?Может быть, удастся сделать все за один ход?

Я был на этом день или два, поэтому любая помощь очень ценится.

...