我的班级;
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临时收集我可以应用跳过和限制但缓慢的方式。
最好的方法是什么?我的英文