mongodb sortby在c#上的另一个集合字段

时间:2013-05-08 06:58:40

标签: c# mongodb

我的班级;

public class Users
{
    [BsonRepresentation(BsonType.ObjectId)]
    [BsonId]
    public string Id { get; set; }

    [BsonRequired]
    public string UserName { get; set; }

    [BsonRequired]
    public string Password { get; set; }

    [BsonIgnoreIfNull]
    public string Name { get; set; }

    [BsonIgnoreIfNull]
    public string SurName { get; set; }

    [BsonIgnoreIfNull]
    public string Email { get; set; }

    [BsonIgnoreIfNull]
    [BsonRepresentation(BsonType.ObjectId)]
    public string SettingId { get; set; }

}

public class Settings
{
    [BsonRequired]
    public string SettingName { get; set; }

    [BsonRequired]
    public string SettingValue { get; set; }
}

我的查询;

    public virtual Response Get(Request pRequest)
    {            
        int take =pRequest.take == 0 ?  IQueryableObject.Count() : pRequest.take;
        int skip = pRequest.skip == 0 ? 0 : pRequest.skip;

        IMongoQuery qr = null;

        qr = AddQuery(qr,pRequest);
        List<T> results = new List<T>();
        if (qr == null)
        {
            results = Collection.FindAllAs<T>().SetSortOrder(GetOrders(pRequest.sort)).Skip(skip).Take(take).ToList<T>();
        }
        else
        {
            results =Collection.FindAs<T>(qr).SetSortOrder(GetOrders(pRequest.sort)).Skip(skip).Take(take).ToList<T>();
        }

        return new Response(results.ToArray(),Collection.FindAs<T>(qr).Count<T>());

    }
private IMongoSortBy GetSortOrders(List<Sort> pSorts)
    {

        IMongoSortBy sb = SortBy.Null;
        if (pSorts == null) return sb;
        List<string> ascList = (from o in pSorts where o.dir == "asc" select o.field).ToList<string>();
        List<string> descList = (from o in pSorts where o.dir == "desc" select o.field).ToList<string>();
        if (ascList.Count > 0 && descList.Count > 0)
        {
            sb = SortBy.Ascending(ascList.ToArray<string>()).Descending(descList.ToArray<string>());
        }
        else if (ascList.Count > 0)
        {
            sb = SortBy.Ascending(ascList.ToArray<string>());
        }
        else if (descList.Count > 0)
        {
            sb = SortBy.Descending(descList.ToArray<string>());
        }
        return sb;
    }

    private IMongoSortBy GetOrders(List<Sort> pSorts)
    {
        IMongoSortBy sb = GetSortOrders(pSorts);
        if (sb == null) return SortBy.Ascending("_id");
        else return sb;
    }

我想排序Settings.SettingName我尝试map reduce但map reduce不支持take和limit。我尝试map-reduce临时收集我可以应用跳过和限制但缓慢的方式。

最好的方法是什么?我的英文

0 个答案:

没有答案