使用猫鼬模式并保存到其他集合

时间:2019-12-02 14:55:43

标签: node.js mongodb mongoose schema

我的目标是学习如何使用模型来保存所需的馆藏(馆藏名称=年),我创建来解决的问题如下:假设我正在处理剩余的学校/学院班级数据相同(名称,位置等),但唯一的变量是2019年,2020年,依此类推。

我知道我只能在一个idyear之前使用一个集合并进行过滤,但是我认为最好将其分成以年命名的新集合,这样我可以得到类似的东西:

  • 收藏2018-> X件
  • 收藏2019-> Y件
  • 收藏2020-> Z个物品

我尝试了以下代码:

classModel.js

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

const classSchema = new Schema({
    name: {type: String, required: true},
    info1: {type: String},
    iduser: {type: Number}
});

module.exports = mongoose.model('Classes', classSchema);

classController.js

const classModel = require('classModel');
const userModel = require('userModel');
exports.insertClass = async function(req, res){

    const user = await userModel.find({
        username: req.user
    }).limit(1);

    await classModel.create({
        name: req.name,
        info1: req.location,
        iduser: user[0].idperson
    }, {collection: '999999'}, function(err){
        if(err) console.log(err);
        res.sendStatus(200);
    });

}

我现在很难编码的年份,但是我计划附加到用户会话上(因此我为什么要使用其他搜索)。 使用此代码,我可以设法基于模型名称将其插入模型的默认行为中,但这不是我的目标,并且最终得到以下结果:

  • 收集类-> X + Y + Z

我正在阅读猫鼬文档,并找到了“选项”和“集合”,所以我试图在其中强加集合名称(例如this question),但不能这样做。

我在周末陷入了这个问题,所以我不能说我是在某个时候“俯瞰”还是只是刚进入节点,如果有人可以指出我的方向,我将非常高兴,我希望问题很清楚。

1 个答案:

答案 0 :(得分:0)

您将无法使用单个架构动态更改类集合。您将需要为每个集合创建多个类架构,即

const class2018 = new Schema(
const class2019 = new Schema(
const class20220 = new Schema(

,然后确定要用于客户端的架构。

这种方法没有任何好处,当您尝试加入和查询这些关系时,您只是在制造复杂性和进一步的挑战。

我将创建一个单一的类集合,在要加入的字段上创建一个索引,就像year一样。易于管理,易于加入,这是猫鼬所期望的设计,并且在开始进行聚合查询时,您的头痛将大大减轻。