猫鼬最新的保存和填充子文档的方式

时间:2019-03-05 04:29:38

标签: mongodb mongoose nosql associations ref

我想提供当前代码,看看是否有一种快速的方法来重构它。我只是想将一个孩子保存到父文档中,然后返回填充的那个父文档。

我的问题是,除此以外,我无法使其工作,我希望可以进行一些清理,因为我的数据最终将嵌套几层。

我的模特:

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;

简而言之,这可行。但是,我想清理它,也许不必保存子文档,查询用户,然后推送新的子文档,返回新副本,然后填充。猫鼬中有没有更有效的方法?也许一口气就能做到?

我已经呆了一两天,所以真的很感谢任何帮助。

0 个答案:

没有答案