あなたが関係を使用する場合は、SQLを好きではない場合、あなたは、あなたがRethinkDBのようなデータベースを使用することができ、MySQLのようなリレーショナルデータベースを使用する必要があり、モンゴ中関係がグラグラしています。それで、私はあなたの質問に私の知る限りで答えようとします。
1 - アプローチはいつ別のものを使うべきですか?
IMOの場合、できるだけデータを別にしておく必要があります。たとえば、ブログでは、自分のコレクション内にコメントと投稿を残しておき、Commentsコレクションに対するhasMany関係として投稿を参照したいとします。はい、投稿記事にコメントを追加するだけで、ユーザーが自分のコメントを見ることができるようにする方法を追加したいとします。次に、各投稿のコメントを見るためのクエリを作成し、それはちょうど悪いです。
2 - 両方の種類のデータストレージを組み合わせることをお勧めしますか?
この質問は、最初の1
3と同じであると考えられる - どのように私は、同じコレクション内または文書リファレンスとして関係データを保存するためにマングースを設定することができますか?
最初に何かを明らかにする、Mongoはドキュメントをコレクション内に格納します。 ドキュメント内にリレーションを持たせるには、そのドキュメントにプロパティが追加される場所にプロパティを追加します。ブログの例:アプリケーションが静的に同じになり、あなたがスケーラビリティを気にしない場合
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const postSchema = new Schema({
title: String,
date: String,
author: String,
text: String,
comments: Array
})
export default mongoose.model('Post', postSchema);
さて、これはそれを行うためのシンプルな、より良い方法のように見えるかもしれません。私がお勧めするのは、あなたの懸念を分けておくことです。
この例のスキーマに基づいて、author
とcomments
は独自のコレクションである必要があります。
著者は(多くの記事を持っている多くのコメントがあります)
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const authorSchema = new Schema({
name: String,
posts: [{
type: Schema.Types.ObjectId,
ref: 'Post'
}],
comments: [{
type: Schema.Types.ObjectId,
ref: 'Comment'
}]
})
export default mongoose.model('Author', authorSchema);
コメントは(作者に属し、つのポストを持っている)
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const commentSchema = new Schema({
author: {
type: Schema.Types.ObjectId
ref: 'Author'
},
post:{
type: Schema.Types.ObjectId,
ref: 'Post'
}
})
export default mongoose.model('Comment', commentSchema);
投稿(作者に属し、多くのコメントがあります)
import mongoose from 'mongoose'
const Schema = mongoose.Schema
const postsSchema = new Schema({
author: {
type: Schema.Types.ObjectId
ref: 'Author'
},
title: String,
date: String,
text: String,
comments: [{
type: Schema.Types.ObjectId,
ref: 'Comment'
}]
})
export default mongoose.model('Post', postsSchema);
うわー、あなたの偉大な答えをありがとう@バーチュー、それは今、多くの意味があります。私はSQLの世界であり、「非リレーショナル」スキーマの関係を理解するのはちょっと混乱していました。ありがとうございました –
Ohh btw @Baruch ...これはあなたに役立つ場合に役立つ、この関係に関する記事です。http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for -mongodb-schema-design-part-1 –
@DavidEspino共有してくれてありがとう。私は6ヶ月のようにMongoを使っていない。私はそれを試してみました、RethinkDBが恋に落ちていました。しかし、現時点では、私の仕事には私が気にしないMySQLを使用する必要があります。 – Baruch