2016-02-24 2 views
1

Изучение способов использования мангуста, и я пытаюсь разработать схемы с надежной переменной. Приложение будет отправлять сообщения различным службам (например, Twitter, Tumblr) и хранить их в одной коллекции («Сообщения»). Были бы некоторые общие черты (например, когда они были опубликованы, или краткое резюме), но другие поля (например, содержимое сообщения, сопроводительные сценарии в блогах) будут различаться.Схемы и поддомены в mongoose.js

Какой хороший способ приблизиться к этому? Есть ли хороший способ связать разные коллекции, чтобы избежать этого в первую очередь? Ссылки/подсхем? Использовать 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 
}); 

ответ

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

Это выглядит очень много, как то, что я ищу, спасибо! – mattpolicastro

Смежные вопросы