学习如何使用mongoose,并尝试设计可靠变量的模式。该应用程序将发布到不同的服务(例如Twitter,Tumblr)并将它们存储在一个集合中("帖子")。会有一些共性(例如发布时或简短摘要),但其他字段(如帖子内容,博客文章和附带的脚本)会有所不同。
有什么方法可以解决这个问题?是否有一种很好的方法将不同的集合绑定在一起以避免这种情况?参考/子模式?使用Schema.Types.Mixed
,并通过安全检查扩展默认方法来强化一致性?
// Example pseudo-functioning schemas
const tweetSchema = new mongoose.Schema({
tweetUrl: {type: string, trim: true}
length: Number
});
const blogSchema = new mongoose.Schema({
title: String,
edits: [Date],
slug: { type: String, trim: true},
body: String
});
const postSchema = new mongoose.Schema({
published: Date,
summary: String,
type: String,
contents: blogSchema || tweetSchema
});
答案 0 :(得分:1)
也许discriminators
可能是您案例的更好选择。
判别器是一种架构继承机制。它们使您能够在相同的基础MongoDB集合之上拥有多个具有重叠模式的模型。
示例代码如下
var options = {discriminatorKey: 'contents'};
const postSchema = new mongoose.Schema({
published: Date,
summary: String,
type: String,
}, options);
var Post = mongoose.model('Post', postSchema);
const tweetSchema = new mongoose.Schema({
tweetUrl: {type: string, trim: true}
length: Number
}, options);
var Tweet = Post.discriminator('Tweet', tweetSchema);
const blogSchema = new mongoose.Schema({
title: String,
edits: [Date],
slug: { type: String, trim: true},
body: String
}, options);
var Blog = Post.discriminator('Blog', blogSchema );