2016-04-21 9 views
2

Meine Anwendung ist über College-Suche, wird es zwei Arten von Benutzern, einer der Endbenutzer, die nach Hochschulen und andere die College-Besitzer suchen.Wie man ein Benachrichtigungsdatenbankschema in mongodb entwirft?

Ich führe eine gemeinsame 'Benutzer' Sammlung für beide Arten von Benutzern. Sein Schema sieht wie unten

{ 
    _id : ObjectId(), 
    display_name: String, 
    email: String, 
    password_hash: String, 
    type :Number 

} 

Jetzt ein Admin dieser Anwendung möchte eine Benachrichtigung an die Nutzer drücken, diese Benachrichtigung für alle Nutzer sein können, oder für einen bestimmten Benutzer oder für die Eigentümer der Hochschulen oder für eine Gruppe von Benutzern.

Ein Notifizierungsformulars besteht aus drei Dingen wie unten,

{ 
    _id : ObjectId(), 
    notification_message: String, 
    date: Date 
} 

Jetzt will ich tun, was ist ein api zu treffen, die mir alle Meldungen eines bestimmten Benutzers für jeden, zusammen mit einem Flag-Feld gibt Benachrichtigung, die angibt, ob die Benachrichtigung gelesen oder ungelesen ist.

Nun, wie sollte mein Datenbankdesign aussehen?

Ich dachte an zwei Möglichkeiten,

  1. Ich mag eine Benachrichtigung Sammlung erhalten und die Notifizierungsformulars für jeden gewünschten Benutzer der Mitteilung wiederholt auch in diesem Dokument ein Feld pflegen als ‚Marke als gelesen würde ich ‘, das Dokument wird wie folgt aussehen

    { 
        _id : ObjectId(), 
        notification_message: String, 
        date: Date, 
        to_user_id : ObjectId(), 
        mark_as_read: Boolean 
        } 
    

    Pros: Abfragen für die Meldungen eines bestimmten Benutzers schneller sein

    Cons: Für jede Meldung ‚Mitteilung‘ Sammlung wird drastisch erhöhen, da ich die gleiche Meldung in Benachrichtigung Sammlung für viele Benutzer am Wiederholung, für die die Benachrichtigung zu gedacht.

2.I wollen eine Benachrichtigung Sammlung erhalten und für jedes Notifizierungsformulars beibehalten ich ein Array von Benutzern für die Benachrichtigung und eine Reihe von Benutzern, die diese Benachrichtigung

Pros gelesen haben: Mitteilung Sammlung kann Größe

Cons weniger: Notifizierungsformular die maximale Größe von 16 MB schlagen kann

Dies sind o Nur zwei Dinge, an die ich denken könnte, gibt es einen anderen besseren Weg, dies zu tun? Ihre Hilfe wird sehr geschätzt.

Antwort

0

Wie wäre es damit?

{ 
    sender: Object, // user object 
    receiver: [ String ] //array of user _ids 
    message: String, // any description of the notification message 
    read_by: [{ readerId: String, read_at: Date }], 
    created_at: Date, 
} 
Verwandte Themen