我的目标是学习如何使用模型来保存所需的馆藏(馆藏名称=年),我创建来解决的问题如下:假设我正在处理剩余的学校/学院班级数据相同(名称,位置等),但唯一的变量是2019年,2020年,依此类推。
我知道我只能在一个idyear之前使用一个集合并进行过滤,但是我认为最好将其分成以年命名的新集合,这样我可以得到类似的东西:
我尝试了以下代码:
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);
});
}
我现在很难编码的年份,但是我计划附加到用户会话上(因此我为什么要使用其他搜索)。 使用此代码,我可以设法基于模型名称将其插入模型的默认行为中,但这不是我的目标,并且最终得到以下结果:
我正在阅读猫鼬文档,并找到了“选项”和“集合”,所以我试图在其中强加集合名称(例如this question),但不能这样做。
我在周末陷入了这个问题,所以我不能说我是在某个时候“俯瞰”还是只是刚进入节点,如果有人可以指出我的方向,我将非常高兴,我希望问题很清楚。
答案 0 :(得分:0)
您将无法使用单个架构动态更改类集合。您将需要为每个集合创建多个类架构,即
const class2018 = new Schema(
const class2019 = new Schema(
const class20220 = new Schema(
,然后确定要用于客户端的架构。
这种方法没有任何好处,当您尝试加入和查询这些关系时,您只是在制造复杂性和进一步的挑战。
我将创建一个单一的类集合,在要加入的字段上创建一个索引,就像year
一样。易于管理,易于加入,这是猫鼬所期望的设计,并且在开始进行聚合查询时,您的头痛将大大减轻。