gpt4 book ai didi

node.js - mongoose.js 中的架构和子文档

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:55 24 4
gpt4 key购买 nike

学习如何使用 Mongoose ,并尝试设计可靠的可变模式。该应用程序将发布到不同的服务(例如 Twitter、Tumblr)并将它们存储在一个集合中(“帖子”)。会有一些共性(例如发布时间或简短摘要),但其他字段(例如帖子内容、博客帖子的随附脚本)会有所不同。

解决这个问题的好方法是什么?有没有一种好的方法可以将不同的集合绑定(bind)在一起以避免这种情况发生?引用文献/子模式?使用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
});

最佳答案

也许是 discriminators对于您的情况可能是更好的选择。

Discriminators are a schema inheritance mechanism. They enable you to have multiple models with overlapping schemas on top of the same underlying MongoDB collection.

示例代码如下

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

关于node.js - mongoose.js 中的架构和子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35615633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com