0

J'ai un modèle de conversation comme ci-dessous:Comment trouver une plus récentes données du tableau dans mangouste

const ConvoSchema = mongoose.Schema({ 
    convoId: { 
     type: String, 
     required: true 
    }, 
    seller: { 
     type: String, 
     required: true 
    }, 
    buyer: { 
     type: String, 
     require: true 
    }, 
    product: [{ type: Schema.Types.ObjectId, ref: 'Post' }], 
    messages: [{ type: Schema.Types.ObjectId, ref: 'Message' }] 
}) 

et je suis en train d'obtenir le dernier message dans le Convo mais ne pouvait pas comprendre comment le faire . des idées?

+0

à moins que vous modifier spécifiquement ajouter des éléments au tableau avec les modificateurs '$ position' ou' $ sort' à '$ push', alors le" dernier "est toujours le" dernier "élément, parce que l'ajout de nouvelles entrées" ajoute "à la fin. Vous pouvez donc toujours obtenir la "dernière" entrée en utilisant ['$ slice'] (https://docs.mongodb.com/manual/reference/operator/projection/slice/) en projection. –

Répondre

0

_id contient essentiellement l'horodatage en elle, de sorte que le premier élément que vous obtenez en .find() sera le plus ancien et le dernier élément sera plus récent,

donc en ajoutant une sorte comme: { _id: -1} sera donner u les dernières données

var Convo = mongoose.model('Convo', ConvoSchema); //init mongoose model 

Convo.find() 
    .limit(1) 
    .sort({ _id: -1 }) 

vous pouvez supprimer les .limit() si tu veux la liste complète des documents

=========================================================== =======================

Désolé pour ne pas lire correctement,

pour Dernier message,

Convo.findOne({}, response => { 
    var data = response.toObject(); 
    latestMessage = data.messages.pop() 
}) 
+0

Question demande le dernier élément dans le "tableau de messages" (* "essayant d'obtenir le dernier message" *). Vous renvoyez le dernier "document" et non le dernier élément du tableau "dans le document". –

+0

utilisez simplement '' '.pop()' '' sur le tableau de messages. ou '' 'data.messages [data.messages.length - 1]' '' vous donnera également le bon résultat. – imixtron

+0

assurez-vous également d'utiliser '' '.toObject()' '' pour cloner le modèle sur un objet statique, donc si vous utilisez '' '.save()' '' pour enregistrer le modèle dans la même invocation . Vous supprimez accidentellement le dernier message en utilisant '' '.pop()' '' – imixtron