mongodb - Mongoose Schema 规划:使用 ObjectID 引用还是使用类型数组:[otherSchema]?
问题描述
我目前正在为我正在构建的应用程序规划数据库结构,这个链接答案中的某些内容向我提出了一些问题。
在 Shivam 提出的结构中,他有时会直接引用另一个集合,换句话说,在一个 Schema 中,他将字段的类型定义为另一种模式类型的数组。例子:
import { Schema } from "mongoose";
import { QuestionSchema } from "./question-schema";
const mongoose = require('mongoose');
export const QuestionSetSchema: Schema = new Schema({
questionSet: {
type: [QuestionSchema],
validate: {
validator: function(value: any) {
return value.length === 12;
},
message: 'Question set must be 12.'
}
},
}, {
timestamps: true
});
在其他情况下,他只使用 ObjectID 对另一个模式/集合的引用:
export const CandidateSchema: Schema = new Schema({
name: String,
email: String, // you can store other candidate related information here.
totalAttempt: {
type: Number,
default: 0,
validate: {
validator: function(value: number) {
return value === 3;
},
message: 'You have already done three attempts.'
}
},
candidateQuestionAnswers: {
type: [Schema.Types.ObjectId],
ref: 'CandidateQuesAnswer'
}
}, {
timestamps: true
});
上述每种情况的用例是什么?“type:[otherSchema]”方法是否实际上嵌入了该集合的实例,还是仅将它们的属性提供给调用它们的 Schema?
解决方案
推荐阅读
- r - 每个因子水平内所有列的所有可能行对之间的差异
- android - 为 windows 运行模拟器 android 和 docker
- javascript - 'Cron' 包在 nodeJS 中没有按预期工作
- c# - 在 Twilio 中使用 AMD 修改调用
- javascript - 如何在选择事件上通过更改 URL 重新加载 Jquery jtable
- javascript - var 未在角度测试中定义
- typescript - 如何在 Protractor-Jasmine-typescript html 报告日志中添加 Pass 语句
- mysql - 为什么使用 mysql 和 docker-compose 会发生访问被拒绝
- windows - 电子应用程序未显示 Windows 通知
- angular2-forms - Angular2如何处理.find方法中的空值