sql >> Database >  >> NoSQL >> MongoDB

Mongoose Prive Chat Bericht Model

Welnu, er is geen juist antwoord op deze vraag, maar zeker, de benaderingen die u hebt genoemd zijn helemaal niet de beste!

Ten eerste, wanneer u overweegt een "chat" -model te ontwerpen, moet u er rekening mee houden dat er miljoenen berichten tussen de gebruikers zouden zijn, dus u moet zich bekommeren om de prestaties wanneer u de chats wilt ophalen.

De berichten in een array opslaan is helemaal geen goed idee, de grootte van uw model zal tegen de tijd groot zijn en u moet er rekening mee houden dat de documentgroottelimiet van MongoDB momenteel 16 MB per document is.

https://docs.mongodb.com/manual/reference/limits/

Ten tweede moet u rekening houden met het pagineringaspect omdat dit de prestaties beïnvloedt wanneer de chat groot is. Wanneer u de chat tussen 2 gebruikers ophaalt, vraagt ​​u niet alle chats sinds het begin van de tijd op, u vraagt ​​alleen de meest recente, en dan kun je de oudere opvragen als de gebruiker door de chat scrollt, dit aspect is erg belangrijk en kan niet worden verwaarloosd vanwege het effect op de prestaties.

Mijn aanpak is om elk bericht in een apart document op te slaan

Allereerst zal het opslaan van elk bericht in een enkel document je prestaties verbeteren tijdens het ophalen van de chats, en de documentgrootte zal erg klein zijn.

Dit is een heel eenvoudig voorbeeld, u moet het model aanpassen aan uw behoeften, het is slechts om het idee weer te geven:

const MessageSchema = mongoose.Schema({
    message:{
        text: { type:String, required:true }
        // you can add any other properties to the message here.
        // for example, the message can be an image ! so you need to tweak this a little
    }
    // if you want to make a group chat, you can have more than 2 users in this array
    users:[{
        user: { type:mongoose.Schema.Types.ObjectId, ref:'User', required:true }
    }]
    sender: { type:mongoose.Schema.Types.ObjectId, ref:'User', required:true },
    read: { type:Date }
},
{
    timestamps: true
});

u kunt de chats ophalen met deze zoekopdracht:

 Message.find(({ users: { "$in" : [#user1#,#user2#]} })
    .sort({ updatedAt: -1 })
    .limit(20)

Makkelijk en overzichtelijk! Zoals je ziet, wordt paginering heel gemakkelijk met deze aanpak.



  1. Wat is de juiste manier om mangoestverbindingen met express.js af te handelen?

  2. Hoe remote mongodb te verbinden met pymongo

  3. Hoe gebruik ik bibliotheken van derden in Glassfish?

  4. MongoDB Regex Query:Waarom werkt dit niet?