2014-06-27 4 views
0

J'ai une collection d'utilisateurs, et je les insère dans une boîte de sélection pour être visible par l'utilisateur. Je veux trier cette collection par le nom des utilisateurs, puis transmettre cela.Mongo db tri alphabétique dans coffeescript

Je suis en train de saisir le nom de salle, puis de retourner le nom de chambre.actif_utilisateur. Il remplit la zone de sélection, mais ne les triera pas.

Template.room_active_users.getActiveUsers = (roomName) -> 
    users = Rooms.findOne({room_name: roomName}).active_users 

J'ai essayé de faire

users = Rooms.findOne({room_name: roomName}).active_users.profile.name 

mais cela ne fonctionne pas.

Actuellement, c'est ce qui est à l'intérieur de la collection lorsque je console.log (utilisateurs):

[Object, null, Object]   // This says that there are 2 users in the room 
    0: Object 
     _id: "ryYnj48Gcgd25fwHm" 
     profile: 
      avatar_url: 
      bio: 
      blog: 
      . 
      . 
      . 
      login: 
      name: Jerry 
    1: null 
    2: Object 
     _id: "hg4mxeTjDxFdTpJJe" 
     profile: 
      avatar_url: 
      bio: 
      blog: 
      . 
      . 
      . 
      login: 
      name: Bob 

Je suis en train de trouver un moyen d'accéder aux noms des utilisateurs et il suffit de les trier cette façon mais vous pouvez « t appeler

.active_users.profile.name 

Il donne cette erreur:

Exception from Deps recompute function: TypeError: Cannot read property 'name' of undefined 

je me suis dit que je devrais écrire un certain type de la fonction de tri pour faire cela, mais tous les exemples que j'ai cherché se sont avérés ne pas fonctionner, et aucun n'est assez spécifique pour correspondre à mon cas.

Toute aide est très appréciée, merci.

+0

essayer le cadre d'agrégation à la place – Sammaye

Répondre

0

Vous pouvez trier et collecter dans la base de données ou le faire en code. Vraiment le db va être meilleur à ce genre de chose et il n'y a pas vraiment de raison de retirer tous ces champs quand on n'en a besoin que d'un. Mais si vous voulez le faire dans le code, j'utiliser lodash's pluck:

# load the users collection into lodash so you can do multiple operations chained 
# compact removes nulls 
# pluck gets only a certain key from the collection of objects 
# value returns the value from the chain 
# 
_(Rooms.findOne({room_name: roomName})).compact().pluck('name').value() 

est-findOne vraiment pas ASYNCH? On dirait qu'il devrait être ...

Il ressemble également findOne accepte un projection parameter, auquel cas vous auriez besoin juste passer que comme ceci:

Rooms.findOne({room_name: roomName}, {'name':1})