Frage

Ich erwäge für eine bevorstehende Website CouchDB, aber ich bin ein wenig verwirrt, so weit so weit, wie ein System von Benutzerbewertungen für die Website zu implementieren. Grundsätzlich kann jedes Inhaltselement von einem bestimmten Benutzer bewertet werden. Welche Art und Weise, dies zu tun am meisten Sinn macht in dem CouchDB-Modell? Ich würde denken, die trockenste und logischste Weg 3 verschiedene Dokumenttypen, Inhalt, Benutzer und ein user_rating doc zu haben wäre, die etwa wie folgt aussieht.

{
  user_id: "USERID"
  content_id: "CONTENTID"
  rating: 6
}

Dann würde ich eine Ansicht erstellen, in dem die Karte die Menge aller Inhalte docs war und user_rating von Inhalt doc ids verkeilt docs, und wo die der Mittelwert der Bewertungen ausgezählt reduzieren und kehrte den Inhalt doc von Inhalt doc-ID eingegeben .

Ist das der beste Weg, dies zu tun? Ich habe noch nicht gefunden viel in der Art von Ressourcen auf CouchDB Best Practices, damit ich bin mir ziemlich unsicher, all dieses Zeug.

Mein Fazit: Die akzeptierte Antwort unten, das ist das, was ich ziemlich viel los war funktioniert zu implementieren, aber Vorsicht, müssen die Dokumente von Inhalt doc-ID eingegeben werden, die auf anderen Dokumenteigenschaften mühsam basierend erweitern Abfragen machen. Ich werde für meine Bedürfnisse in dieser App auf SQL zurück.

War es hilfreich?

Lösung

Klingt wie Sie eine vernünftige Idee gehen haben. CouchDB ist so neu, dass ich denke, es wird eine Weile dauern, für die besten Praktiken zu schütteln.

Eine Karte / reduziert Paar wie könnte dies einen vernünftigen Ausgangspunkt bilden.

Karte:

function(doc) {
   if(doc.type='rating' && doc.content_id) {
     emit(doc.content_id, doc.rating);
   }
}

reduzieren:

function(keys, values) {
   return sum(values)/values.length
}

NB: Die map Funktion der richtige Art zu Ihrem Rating Modell erfordert das Hinzufügen:

{
  type: 'rating',
  user_id: "USERID",
  content_id: "CONTENTID",
  rating: 6
}
scroll top