2014-06-27 57 views
0

我有一組用戶,我將它們插入選擇框以供用戶查看。我想用用戶名稱排序這個集合,然後傳遞它。Mongo db按照字母順序排列的咖啡腳本

我目前正在抓住roomName,然後返回那個roomName.active_users。它會填充選擇框,但不會對它們進行排序。

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

我曾嘗試做

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

,但不起作用。

目前,這是什麼是內部集合時,我CONSOLE.LOG(用戶):

[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 

我試圖找到一種方法來訪問用戶的名稱和排序,只是他們的方式,但你可以「T稱

.active_users.profile.name 

它給這個錯誤:

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

我想我會寫一些類型但是我搜索的所有例子都不起作用,沒有一個能夠適合我的情況。

任何幫助非常感謝,謝謝。

+0

嘗試聚合框架,而不是 – Sammaye

回答

0

您可以在數據庫中進行排序和收集,或者在代碼中進行。真的,db在這類事情上會變得更好,當你只需要一個時,沒有太多理由將所有這些領域拉回來。但是,如果你想這樣做的代碼,我會用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() 

是findOne真的不ASYNCH?似乎應該是...

它也像findOne接受projection parameter,在這種情況下,你只是需要通過在像這樣:

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