Je suis nouveau sur mongodb NoSQL et je suis bloqué au point où je suis incapable de prendre la décision de modéliser le schéma qui pourrait le mieux servir mon but.Mongodb Schema pour Posts and Shares
Je dois concevoir un schéma de manière à ce que mon résultat final soit Posts et Partages classés par temps. Pour cela, je considérais deux options:
Option 1: Different Collection pour postes et Partager comme:
Schéma de collection Post:
var postSchema = mongoose.Schema({
postText: String,
postedBy: String,
privacy: Number,
updatedOn: { type: Date, default: Date.now }
}, { collection: 'posts' });
Schéma pour Partager Collection
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: Intégrer Quote-part dans les messages se
Nouveau schéma pour post
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' });
Maintenant que cela pourrait être un meilleur choix? L'option 1 pose un problème d'interrogation car il n'y a pas de jointure dans mongodb et l'option 2 entraîne la réplication des mêmes données et peut atteindre plusieurs milliards pour des centaines de milliers d'utilisateurs.
Je ne comprends toujours pas pourquoi la 1ère option n'est pas viable. Je suis d'accord que join n'est pas supporté dans mongodb pour les requêtes en ligne. Cependant, en utilisant ce [post] (https://stackoverflow.com/questions/5681851/mongodb-combine-data-from-multiple-collections-into-one-how) vous pouvez utiliser join pour les processus hors ligne. Comment la première option est-elle en train de vaincre le but? Peux-tu élaborer? –
** MapReduce ** Technique renvoie un ** document ** BSON qui peut être d'une taille maximale de ** 16mb **, donc mon nombre de messages et le nombre de partages par poste peuvent augmenter et peuvent atteindre 16mb taille du document résultant –
D'accord. Je suis d'accord avec vous concernant map-reduce usecase. Mais je ne suis toujours pas capable de comprendre pourquoi la 1ère option ne sera pas utile. Je veux dire que si vous pouvez définir vos demandes d'api ou votre cas d'utilisation, ce sera plus clair. –