Ich bin neu zu mongodb NoSQL Konzept und fest an der Stelle, wo ich nicht in der Lage bin, eine Entscheidung für die Modellierung des Schemas zu treffen, das meinem Zweck am besten dienen könnte.Mongodb Schema für Beiträge und Freigaben
Ich muss Schema so gestalten, dass ich mein Endergebnis als Posts und Shares nach Zeit sortiert haben. Dafür hielt ich zwei Möglichkeiten:
Option 1: Verschiedene Sammlung Beiträge and Share als:
Schema für Beitrag Sammlung:
var postSchema = mongoose.Schema({
postText: String,
postedBy: String,
privacy: Number,
updatedOn: { type: Date, default: Date.now }
}, { collection: 'posts' });
Schema für die Anteils Sammlung
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' });
Option 2: Einbetten Teile in Beiträgen selbst
Neues Schema für Beitrag
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' });
Nun, die hierfür könnte eine bessere Wahl sein? Option 1 hat Probleme beim Abfragen, da es keine Verbindungen in mongodb gibt, und Option 2 führt zur Replikation derselben Daten und kann für Hunderttausende von Benutzern auf mehr als Milliarden anwachsen.
Ich bin immer noch nicht klar, warum die erste Option nicht praktikabel ist. Ich stimme zu, dass Join in mongodb für Online-Abfragen nicht unterstützt wird. Mit diesem [post] (https://stackoverflow.com/questions/5681851/mongodb-combine-data-from-multiple-collections-into-one-how) können Sie Join für Offline-Prozesse verwenden. Wie ist die erste Option, die den Zweck vereitelt, nicht klar? Kannst du es ausarbeiten? –
** MapReduce ** Technique gibt ein ** BSON-Dokument ** zurück, das eine maximale Größe von ** 16mb ** haben kann, so dass die Anzahl der Posts und die Anzahl der Freigaben pro Post erhöht werden kann und die 16mb-Größe des resultierenden Dokuments –
erreicht OK. Ich stimme Ihnen hinsichtlich der Verwendung von map-reduce zu. Aber ich kann immer noch nicht verstehen, warum die erste Option nicht hilfreich ist. Ich meine, wenn Sie Ihre API-Anfragen oder Anwendungsfälle definieren können, wird es klarer. –