Mam schemat dla elementu i użytkownika. Chcę zezwolić użytkownikowi na polubienie lub nie podoba mi się przedmiot, a także chcę zapisać powiązanie ratingowe zarówno na przedmiocie, jak i na użytkowniku.Jak powinienem przechowywać oceny podobieństwa/negatywne i oceny w mangdb/mongdb przy użyciu pliku node.js
var UserSchema = new Schema({
username : { type: String, required: true, index: { unique: true }
, likes : [{ type: Schema.ObjectId, ref: 'Item'}]
, dislikes : [{ type: Schema.ObjectId, ref: 'Item'}]
, ratings: [???]
});
var ItemSchema = new Schema({
name: { type: String},
, likes : [{ type: Schema.ObjectId, ref: 'User'}]
, dislikes : [{ type: Schema.ObjectId, ref: 'User'}]
, ratings: [???]
});
Użytkownik przechowuje informację o przedmiocie, a przedmiot zapisuje wzorzec użytkownika pod kątem pozytywnych lub negatywnych ocen. Nie jestem pewien, jak przechowywać oceny jako atrybut, ponieważ chcę, aby zarówno użytkownik, jak i wartość, którą ocenili przedmiot.
item.ratings.forEach(function(rating){
<%= rating.user.username %> gave <%= item.name %> a <%= rating.value %>.
});
Chcę również uzyskać listę elementów ocenianych przez użytkownika wraz z wartością ocena:
user.ratings.forEach(function(rating){
<%= user.username %> has rated <%= rating.item.name %> and gave it a <%= rating.value %>
});
Jaki powinien być mój „oceny” schemat wyglądać? Czy można zapisać dwie wartości? identyfikator obiektu użytkownika i wartość oceny (liczba całkowita) i mieć ich kolekcję?
Innym problemem, który widzę z moją metodą jest to, że mangusta nie obsługuje jeszcze głębokiego zaludnienia, więc musiałbym albo użyć do tego modułu (https://github.com/JoshuaGross/mongoose-subpopulate), to w dużej mierze nie jest testowane lub przechowywane w inny sposób, który nie będzie miał więcej niż jeden poziom zagnieżdżania, więc mogę uzyskać moje dane za pomocą .populate()
Wszelkie opinie są mile widziane, ponieważ jestem nowy do noSQL i być może nadmiernie komplikuję to.
Nie sądzę, że możesz zrobić to jeszcze w mangurze: '.populate ('ratings._item')' - to właśnie mam na myśli przez deep populate(). – chovy
Tak, możesz to zrobić, jeśli oceny są dokumentem osadzonym, a nie ref. Wykonuję to dokładne połączenie w moim własnym kodzie. (z różnymi nazwami oczywiście) –
Jeśli używam ocen: [RatingSchema] - w jaki sposób mogę go wypełnić? Co wkładam do tablicy ocen? Chcę mieć osobną tablicę ocen - nie sądzę, że chcę osadzać i tracić ocenę w obiekcie użytkownika, którego nie mogę wyszukać. W końcu chcę zrobić Ratings.find ({_ item: item._id}, fn); – chovy