如何将一个猫鼬集合的ID添加到另一个集合的数组中?

时间:2018-09-10 04:02:26

标签: node.js express mongoose

我正在尝试将类别文档的ID添加到预算文档中。以下是我的预算架构。

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 
}; 
  

要发布类别,我使用此快速发布请求将类别添加到类别集合中,并将其ID添加到预算集合中。

//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);
            })
        }) 

运行此命令时,它确实将类别添加到集合中,但没有将ID添加到“预算”文档中的categoryIDs数组中。请帮助

1 个答案:

答案 0 :(得分:1)

首先,如mongoose docs中所述,将模型名称从Plural更改为Singular,以避免混淆:

  

第一个参数是模型集合的单数名称   是为了。猫鼬会自动寻找您的复数形式   型号名称。因此,对于上面的示例,模型Tank用于   坦克收集在数据库中。 .model()函数进行复制   模式。确保已添加所有要模式化的内容   在调用.model()之前!

因此,categoriesCategoryBudgetsBudget。请在Mongoose docs ref此处new之前验证mongoose.model

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