mongodb Grenze in das eingebettete Dokument
Ich brauche um eine Nachricht zu erstellen, wo eine person kann ein Gespräch mit vielen Benutzern.
Zum Beispiel habe ich zu sprechen beginnen mit user2, user3 und user4, so ist jeder von Ihnen kann sehen, das ganze Gespräch, und wenn das Gespräch nicht privat, an jedem Punkt der Zeit, alle Teilnehmer können hinzufügen, eine andere person zum Gespräch.
Hier ist meine Idee, wie dies zu tun.
Ich bin mit Mongo und meine Idee ist, verwenden Sie den dialog, der eine Instanz anstelle der Nachricht.
Das schema ist wie folgt aufgelistet:
{
_id : ...., //dialog Id
'private' : 0 //is the conversation private
'participants' : [1, 3, 5, 6], //people who are in the conversation
'msgs' :[
{
'mid' : ...//id of a message
'pid': 1, //person who wrote a message
'msg' : 'tafasd' //message
},
....
{
'mid' : ...//id of a message
'pid': 1, //person who wrote a message
'msg' : 'tafasd' //message
}
]
}
Sehe ich einige Vorteile für diesen Ansatz
- in einer großen Datenbank es wird leicht sein, um Nachrichten zu finden, für einige Besondere Gespräch.
- es wird leicht sein, um das hinzufügen von Personen zur Konversation.
aber hier ist ein problem, für das ich keine Lösung finden:
das Gespräch ist immer zu lange (nehmen wir skype als Beispiel) und Sie werden nicht angezeigt Sie alle das Gespräch, Sie zeigen dir einen Teil und danach zeigen Sie weitere Nachrichten.
In anderen Situationen, skip, limit löst den Fall, aber wie kann ich das machen hier?
Wenn dies nicht möglich ist welche Vorschläge haben Sie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die MongoDB docs erklären, wie man wählen Sie einen Teilbereich aus einem array-element.
Können Sie diese Technik verwenden, um wählen Sie nur die Nachrichten, die relevant für Ihre Benutzeroberfläche. Allerdings bin ich mir nicht sicher, dass dies eine gute schema-design. Vielleicht möchten Sie erwägen die Trennung "sichtbar" Meldungen "archivierte" Nachrichten. Es könnte die Abfrage etwas einfacher/schneller.
Gibt es Einschränkungen, wenn Ihr Gespräch, haben viele, viele Nachrichten:
Meine Vorschläge sind:
Ergebnis: