Как добавить идентификатор одной коллекции мангустов в массив другой коллекции? - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь добавить идентификатор документов моей категории в мои бюджетные документы. Ниже приведена схема для моих бюджетов.

var {mongoose} = require('../db/mongoose'); 


var budgetsSchema = new mongoose.Schema({
        year: Number,
        categoryIDs: [{type:mongoose.Schema.ObjectId,
            ref: 'categories'}]
}); 

var Budgets = mongoose.model('Budgets', budgetsSchema);

module.exports = {
    Budgets
};

А вот схема для моей коллекции категорий.

var {mongoose} = require('../db/mongoose'); 

var categorySchema = mongoose.Schema({
    name: String,
    amount: Number, 
    sub_categories: [{
        name: String,
        amount: Number
    }]
})

var categories = mongoose.model('categories', categorySchema); 

module.exports = {
    categories 
}; 
  

Для публикации категорий я использую этот экспресс-запрос на публикацию, чтобы добавить категории в коллекцию категорий и ее идентификатор в коллекцию Бюджет.

//The ID is the Budget ID
app.post('/categories/:id', (req, res) => {
            var id = req.params.id;
            var sub_categories = req.body.sub_categories; 
            var category = new categories({
                name: req.body.name, 
                amount: req.body.amount, 
                sub_categories 
            })

            category.save().then((docs) => {
                res.send(docs);
                console.log(docs)
            }).catch((e) => res.status(404).send(e)); 

            Budgets.findById(id).then((docs) => {
                if(!docs) {
                    res.status(404).send();
                }
                docs.categoryIDs.push(category._id);
            }).catch((e) => {
                res.send(e).status(404);
            })
        }) 

Когда я запускаю это, он добавляет категорию в коллекцию, но не добавляет идентификатор в массив categoryIDs в документе Budget. Пожалуйста, помогите

1 Ответ

0 голосов
/ 10 сентября 2018

Во-первых, измените название модели с Plural на Singular, как указано в документах mongoose , чтобы избежать путаницы:

Первый аргумент - это единственное название коллекции вашей модели. для. Mongoose автоматически ищет множественную версию вашего название модели. Таким образом, для приведенного выше примера модель Tank предназначена для Коллекция танков в базе. Функция .model () делает копию схемы. Убедитесь, что вы добавили в схему все, что хотите перед вызовом .model ()!

То есть categories до Category и Budgets до Budget. Пожалуйста, проверьте new до mongoose.model здесь, Документы Mongoose ref .

var categorySchema = new mongoose.Schema({
    name: String,
    amount: Number, 
    sub_categories: [{
        name: String,
        amount: Number
    }]
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...