2014-06-27 29 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})