我如何在这个数组中获得独特的元素?

使用Mongoid。 不幸的是,Mongoid不允许select独特的/独特的! 已经得到这些结果。 正如你所看到的,有7个结果。 如果仔细看(在user_id),只有2个用户。

[ #<Activity _id: 4cea6c4572357e00fa00011a, created_at: 2010-11-22 13:12:37 UTC, updated_at: 2010-11-22 13:12:37 UTC, action: "Attend", user_id: BSON::ObjectId('4cea2fb872357e00fa000025'), artist_id: nil, media_id: BSON::ObjectId('4cea447472357e00fa00009a')>, #<Activity _id: 4cea6c3072357e00fa000116, created_at: 2010-11-22 13:12:16 UTC, updated_at: 2010-11-22 13:12:16 UTC, action: "Attend", user_id: BSON::ObjectId('4cea2fb872357e00fa000025'), artist_id: nil, media_id: BSON::ObjectId('4cea447472357e00fa00009a')>, #<Activity _id: 4cea6bdd72357e00fa00010d, created_at: 2010-11-22 13:10:53 UTC, updated_at: 2010-11-22 13:10:53 UTC, action: "Attend", user_id: BSON::ObjectId('4cea2fb872357e00fa000025'), artist_id: nil, media_id: BSON::ObjectId('4cea447472357e00fa00009a')>, #<Activity _id: 4cea46df72357e00fa0000a4, created_at: 2010-11-22 10:33:03 UTC, updated_at: 2010-11-22 10:33:03 UTC, action: "Attend", user_id: BSON::ObjectId('4cea2fb872357e00fa000025'), artist_id: nil, media_id: BSON::ObjectId('4cea447472357e00fa00009a')>, #<Activity _id: 4cea40c572357e00fa00006f, created_at: 2010-11-22 10:07:01 UTC, updated_at: 2010-11-22 10:07:01 UTC, action: "Attend", user_id: BSON::ObjectId('4cea2fb872357e00fa000025'), artist_id: nil, media_id: BSON::ObjectId('4cea3c8b72357e00fa00005e')>, #<Activity _id: 4cea3ca172357e00fa000062, created_at: 2010-11-22 09:49:21 UTC, updated_at: 2010-11-22 09:49:21 UTC, action: "Attend", user_id: BSON::ObjectId('4cea39b772357e00fa000046'), artist_id: nil, media_id: BSON::ObjectId('4cea3c8b72357e00fa00005e')>, #<Activity _id: 4cea344a72357e00fa00003f, created_at: 2010-11-22 09:13:46 UTC, updated_at: 2010-11-22 09:13:46 UTC, action: "Attend", user_id: BSON::ObjectId('4cea2fb872357e00fa000025'), artist_id: nil, media_id: BSON::ObjectId('4cea306c72357e00fa000031')> ] 

我正在看着这个 ,正在想我可以做类似的事情,所以我的数组现在看起来像这样:

 [ #<Activity _id: 4cea6c4572357e00fa00011a, created_at: 2010-11-22 13:12:37 UTC, updated_at: 2010-11-22 13:12:37 UTC, action: "Attend", user_id: BSON::ObjectId('4cea2fb872357e00fa000025'), artist_id: nil, media_id: BSON::ObjectId('4cea447472357e00fa00009a')>, #<Activity _id: 4cea3ca172357e00fa000062, created_at: 2010-11-22 09:49:21 UTC, updated_at: 2010-11-22 09:49:21 UTC, action: "Attend", user_id: BSON::ObjectId('4cea39b772357e00fa000046'), artist_id: nil, media_id: BSON::ObjectId('4cea3c8b72357e00fa00005e')> ] 

我不关心提取结果的组合。 只要我在结果集中有唯一的user_id。 任何人都知道这可以实现吗?

你可以使用uniq方法。 假设你的数组是ary ,请调用:

 ary.uniq{|x| x.user_id} 

这将返回一个具有唯一user_id的集合。

这应该为你工作:

考虑表1有一个由多个logging中可能具有相同值的活动名称组成的列。 这就是你将只提取表1中活动字段的唯一条目的方法。

 #An array of multiple data entries @table1 = Table1.find(:all) #extracts **activity** for each entry in the array @table1, and returns only the ones which are unique @unique_activities = @table1.map{|t| t.activity}.uniq 

对于那些将来会触及的人,现在可以使用Mongoid::Criteria#distinct方法从数据库中只select不同的值:

 # Requires a Mongoid::Criteria Attendees.all.distinct(:user_id) 

http://mongoid.org/en/mongoid/docs/querying.html(v3.1.0

你看过这个页面吗?

http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Distinct

这可能会节省一些时间?

例如db.addresses.distinct(“zip-code”);

不要使用数组,而是考虑使用哈希或集合 。

集合的行为类似于一个数组,只有它们包含唯一的值,而且,在封面下,它们build立在哈希上。 与数组不同,集合不保留项目放入的顺序。 哈希不保留顺序,但可以通过一个键访问,所以你不必遍历哈希来find一个特定的项目。

我喜欢使用哈希。 在您的应用程序中,user_id可能是键,值将是整个对象。 这将自动删除哈希中的任何重复。

或者,只能从数据库中提取唯一的值,如John Ballinger所build议的。

Errr,在视图中有点混乱。 但是我想我已经把它和团队合作了(http://mongoid.org/docs/querying/);

调节器

 @event_attendees = Activity.only(:user_id).where(:action => 'Attend').order_by(:created_at.desc).group 

视图

 <% @event_attendees.each do |event_attendee| %> <%= event_attendee['group'].first.user.first_name %> <% end %>