DbHelper.db.GetCollection<T>(name); // name表示T映射的Collection名称
GetCollection这个方法必须指定name参数。其实这里我觉得之前在映射的时候应该已经确定了T对应的Collection的名称,为什么这里的name必须要指定呢?还是说有其他方法我不知道的?
GetCollection<T>().FindAll();
在实际应用在,我们一般都是会有查询条件,以及排序条件的。
GetCollection<T>().Find(query).SetSortOrder(sortBy);
同时你也可以利用SetSkip和SetLimit来进行分页:
GetCollection<T>().Find(query).SetSortOrder(sortBy).SetSkip(skip).SetLimit(limit);
下面的是我根据标签获取对应数据的方法,根据更新时间排序,还没有处理分页的功能:
///<summary>
/// 获取标签对应的数据
///</summary>
///<param name="ht"></param>
///<returns></returns>
public static List<HouseInfo> Find(HouseTag ht)
{
QueryComplete query = null;
if (ht != null)
{
query = Query.And(
Query.GTE(HouseTag.PNameArea, ht.AreaMin),
Query.LTE(HouseTag.PNameArea, ht.AreaMax),
Query.GTE(HouseTag.PNamePrice, ht.PriceMin),
Query.LTE(HouseTag.PNamePrice, ht.PriceMax),
Query.GTE(HouseTag.PNamePriceTotal, ht.PriceTotalMin),
Query.LTE(HouseTag.PNamePriceTotal, ht.PriceTotalMax),
Query.GTE(HouseTag.PNameYear, ht.YearMin),
Query.LTE(HouseTag.PNameYear, ht.YearMax)
);
if (!string.IsNullOrEmpty(ht.Zone))
{
MongoDB.Bson.BsonRegularExpression reg = new MongoDB.Bson.BsonRegularExpression(string.Format("*{0}*", ht.Zone));
query = Query.And(query, Query.Matches(HouseTag.PNameZone, reg));
}
}
return MongoHelper.FindAll<HouseInfo>(query, SortBy.Descending("UpdateTime")).ToList();
}
获取了数据之后,接下去就是保存数据了,保存(新增和修改)数据相对简单一点,直接用Save就好了,而且,我这里也没有处理变化的数据,每次保存都是整个对象进行了更新(就效率而言,肯定不合适,但就编程而言,那是方便不只一点点啊):
///<summary>
/// 更新数据集合
///</summary>
///<typeparam name="T"></typeparam>
///<param name="listEntity"></param>
public static void Save<T>(IEnumerable<IMongoEntity> listEntity)
where T : class, IMongoEntity
{
if (listEntity != null)
{
MongoCollection<T> col = GetCollection<T>();
foreach (IMongoEntity entity in listEntity)
{
col.Save(entity);
}
}
}
删除数据相对更新有个差别是需要根据对应获取条件(IMongoQuery):
///<summary>
// 删除数据集合
///</summary>
///<typeparam name="T"></typeparam>
///<param name="listEntity"></param>
public static void Remove<T>(IEnumerable<IMongoEntity> listEntity)
where T : class, IMongoEntity
{
if (listEntity != null)
{
MongoCollection<T> col = GetCollection<T>();
foreach (IMongoEntity entity in listEntity)
{
col.Remove(Query.EQ("ID", entity.ID));
}
}
}