4

我有一个包含以下数据的集合:

{
  "_id" : ObjectId("516b969beceaed363a000027"),
  "user" : "276",
  "item" : "796",
  "rating" : 1,
}

我想按顺序排序user,然后在每个用户中,我想跳过前 10 条记录,只返回其他记录。如果用户没有 10 条记录,则不应返回任何内容。我也需要反过来:按用户订购,只返回前 10 条记录。如果用户没有 10 条记录,它应该返回例如 6 条记录。

我不知道如何在 Mongoid 中执行此操作,而无需调用 ruby​​ 脚本。有任何想法吗?

4

1 回答 1

5

假设您定义了一个映射到此集合的模型:

class MyModel
  include Mongoid::Document

  field :user, type: String
  field :item, type: String
  field :rating, type: Integer
end

那么您要查找的查询非常简单:

#  I want to order by user and then within each user, I want to skip the first 10 records, and only return the other records
MyModel.asc(:user).skip(10)

#  Order by user and only return the first 10 records. If a user doesn't have 10 records, it should return for example 6 records
MyModel.asc(:user).limit(10)

注意两个查询都返回 MongoidCriteria对象。如果您需要实际的数组 - 调用to_a结果。

于 2013-04-24T11:38:39.183 回答