2016-11-22 4 views
0

私はMongoDBを好きですが、その非リレーショナルな側面を呑み込むことはできません。私がmongoのユーザとドキュメントから伝えることができる限りは、「あなたのデータの一部を複製するだけでいいです。MongoDBをもっと「リレーショナル」にする

スケーリングについて心配しており、基本的にデータの正しい部分を更新するためにコードの一部を更新することを覚えていないので、APIがあるときに余分なクエリを行うだけのトレードオフのようです記事の要約を持つユーザーのためのデータを返すために含ま:クエリが取得する際、APIの後ろだから、

//db.posts 
{ 
    "id": 1, 
    "owner": 1, 
    "name": "I am making a blog post", 
    "description": "I write about some stuff and there are comments after it", 
    "tags": ["Writing", "Blogs", "Stuff"] 
}, 
{ 
    "id": 2, 
    "owner": 1, 
    "name": "This is my second post", 
    "description": "In this one I write some mores tuff", 
    "tags": ["Writing", "Blogs", "Stuff", "Whatever"] 
} 

:ポストデータは以下のようになります

{ 
    "id": 1, 
    "name": "Default user", 
    "posts_summary": [ 
    { 
     "id": 1, 
     "name": "I am making a blog post", 
     "description": "I write about some stuff and there are comments after it", 
     "tags_count": 3 
    }, 
    { 
     "id": 2, 
     "name": "This is my second post", 
     "description": "In this one I write some more stuff", 
     "tags_count": 4 
    } 
    ] 
} 

を...ユーザーは成功し、私は投稿コレクションに追加のクエリを行って " posts_summary "データを取得し、APIが応答を送信する前に追加します。

これは後で解決する問題を考慮して、良いトレードオフのようです。これは、mongoユーザーの中には、リレーショナルでないものを回避するために何かするのですか、あるいはスキーマを設計するときに間違いを犯したのですか?

答えて

0

あなたはマングースのウルスキーマを使用するようになるマングース http://mongoosejs.com/docs/populate.html

を使用してリレーショナルマッピングを実装するための参照として、スキーマ・オブジェクトを使用することができます:あなたはまた、mongoClientを使用することができます

User:Schema({ 
    _id  : Number, 
    name : String, 
    owner  : String, 
    Post : [{ type: Schema.Types.ObjectId, ref: 'Post' }] 
}); 

    Post:Schema({ 
     _id  : Number, 
     name : String, 
     owner  : String, 
     description  : String, 
     tags:[String] 
    }) 
関連する問題