私はmongodbを初めて利用していますNoSQL概念と私の目的に最も役立つ可能性があるスキーマをモデル化するための決定をすることができない時点で立ち往生。投稿と共有のためのMongodbスキーマ
私は最終結果がであるようにスキームを設計する必要があります。投稿と株式は時間で並べ替えられます。共有コレクションのスキーマ
var postSchema = mongoose.Schema({
postText: String,
postedBy: String,
privacy: Number,
updatedOn: { type: Date, default: Date.now }
}, { collection: 'posts' });
:ポスト収集のスキーマ
:としてさまざまな記事の収集と共有:
オプション1:このため、私は2つの選択肢が考えられ
var shareSchema = mongoose.Schema({
dis_Id: { type: mongoose.Schema.Types.ObjectId }, // Id of post that is shared
shareBy: { type: mongoose.Schema.Types.ObjectId },
shareText: String,
share_privacy: Number,
shareOn: { type: Date, default: Date.now }
}, { collection: 'shares' });
オプション2:投稿に埋め込むシェア自体
ポストのための新しいスキーマ
var postSchema = mongoose.Schema({
postText: String,
postedBy: String,
updatedOn: { type: Date, default: Date.now },
privacy: Number,
share: {
shareBy: { type: mongoose.Schema.Types.ObjectId },
shareText: String,
share_privacy: Number,
shareOn: { type: Date }
}
}, { collection: 'posts' });
より良い選択かもしれないこれの今?オプション1は、mongodbに結合がなく、同じデータの複製につながり、何十万人ものユーザーのために何十億ものものになる可能性があるため、クエリに問題があります。
第1の選択肢が実行可能でない理由については、まだ明確ではありません。私は、オンラインクエリのためにmongodbでは結合がサポートされていないことに同意します。ただし、この[post](https://stackoverflow.com/questions/5681851/mongodb-combine-data-from-multiple-collections-into-one-how)を使用すると、オフラインプロセスにjoinを使用できます。どのように第1のオプションは、目的を破る明確ではありません。あなたは精緻化できますか? –
** MapReduce **テクニックは、最大** 16MBの**サイズの可能性がある** BSONドキュメント**を返すので、投稿あたりの投稿数と共有数が増え、結果ドキュメントのサイズは16MBになります –
OK。私はmap-reduce usecaseに関してあなたに同意します。しかし、まだ私は第一の選択肢が役に立たない理由を理解できません。つまり、APIリクエストやユースケースを定義することができれば、より明確になります。 –