//更新操作使用collection的Update方法,有泛型和非泛型两个版本: //其签名如下(列出了两个简单并常用的的重载,还有几个): public virtual WriteConcernResult Update(IMongoQuery query, IMongoUpdate update); public virtual WriteConcernResult Update(IMongoQuery query, IMongoUpdate update, UpdateFlags flags)
/// <summary> /// 学生实体类 /// </summary> public class Student { public ObjectId Id { get; set; } /// <summary> /// 姓名 /// </summary> public string Name { get; set; } /// <summary> /// 年龄 /// </summary> public Int32 Age { get; set; } /// <summary> /// 地址 /// </summary> public Address Address { get; set; } } /// <summary> /// 地址 /// </summary> public class Address { /// <summary> /// 城市 /// </summary> public String City { get; set; } /// <summary> /// 邮编 /// </summary> public String PostCode { get; set; } }
//在我们关系数据库中,比如oracle或者sqlserver中按照实体类设计,表结构应该是两个,学生信息表以及地址表,但是我们假设存储在一个表中方便我们类比;我要更新数据库中信息,通常关系数据库中我们是这么做的: update tableName set a='a' and b='b' where c='c' //在mongodb中我们就是向下面这样做: use dbName; db.CollectionName.update({query:"query"},{"$set":{update:"update"}})
首先构造IMongoQuery: //a.通过QueryBuilder<T>构造 var t1 = queryBuilder.EQ<String>(t => t.Address.City, "北京");//where city="北京" //b.通过Query构造 var t2 = Query.EQ("Address.City", "北京");//where city="北京" var t3 = Query<Student>.EQ<String>(t => t.Address.City, "北京");//where city="北京" //其次,构造IMongoUpdate var u1 = Update<Student>.Set<String>(t => t.Address.City, "上海");//set city="上海" var u2 = Update.Set("Address.City", "上海");//set city="上海" 这样可以往下调用update方法了 collection.Update(t1, u2);//只更新满足t1的一个文档对象 collection.Update(t1, u2, UpdateFlags.Multi);//更新满足t1的所有文档对象