2017-10-12 4 views
0

J'essaie d'obtenir des messages provenant de salons de discussion uniques. Avec cette requête:Nodejs mongoose- distinct avec tri

message.distinct("chat_room",{ chat_room: {$regex : ".*" + email + ".*"}}) 

Je ne reçois que la liste des salles de chat uniques mais je veux obtenir toutes les informations des collections données (comme le temps, id, etc.). Qui plus est quand j'ajoute:

.sort({ time: 1 }) 

Je reçois une erreur.

+1

Comme par [mangouste docs] (http://mongoosejs.com/docs/api.html#query_Query-sort) 'sort' ne peut pas être utilisé avec' distinct() '. Vous pouvez contourner ce problème en utilisant [aggregate] (https://docs.mongodb.com/manual/reference/method/db.collection.agrgregate/) pour trier les valeurs groupées – Sridhar

+0

Pourriez-vous me soutenir avec le code? –

+1

L'a triée. Merci –

Répondre

1

Au lieu de Distinct vous pouvez utiliser aggragate parce tri et de dévers distincts être utilisés en même temps, il peut lancer une erreur qui cannot sort with distinct

donc ce que vous devez faire est

message.aggregate([{ 
      "$match":{ chat_room: {$regex : ".*" + email + ".*"}} 
},{ 
    $group:{_id:$chat_room} 
    },{$sort:{ 
      'sort_field_name':-1 
      } 
     }]) 
+0

Je reçois une erreur dans cette partie: $ group: {_ id: $ chat_room} –

+0

Correction de ce problème. Changement de $ chat_room en '$ chat_room'. Le problème est qu'il ne donne pas la sortie dont j'ai besoin. Il retourne juste les noms des chambres. Ce dont j'ai besoin, ce sont les messages les plus récents (basés sur la variable temps) avec toutes les informations (pas seulement les noms de char_rooms), provenant de différentes salles de chat. –

+0

L'a trié avec $ last –