MangoDB在C#中的使用
http://blog.sina.com.cn/s/blog_927f3c2401011937.html 图形工具
http://api.mongodb.org/csharp/current/html/R_Project_CSharpDriverDocs.htm C#API
http://docs.mongodb.org/manual/reference/method/ Shell命令
http://docs.mongodb.org/manual/ MongoDB官方文档
http://blog.michaelckennedy.net/2013/04/08/optimistic-concurrency-in-mongodb-using-net-and-csharp/ MongoDB.Kennedy
https://mongodb-documentation.readthedocs.org/en/latest/ecosystem/tutorial/serialize-documents-with-the-csharp-driver.html Serialize Documents with the CSharp Driver(使用c#对实体进行序列化)
https://www.mongodb.com/thank-you/download/mongodb-enterprise 官网下载地址
http://www.ttlsa.com/mms/follow-me-to-use-mongodb-mms-services/ 随我来使用mongodb mms服务
当类体结构改变,删除了某个属性,或者某个属性的类型发生了改变?
1、属性的类型发生了改变
1 public class Address { public ObjectId Id; public string ZipCode; } 2 3 public class ZipCodeSerializer : BsonBaseSerializer { public override object Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options) { var bsonType = bsonReader.CurrentBsonType; switch (bsonType) { case BsonType.Null: bsonReader.ReadNull(); return null; case BsonType.String: return bsonReader.ReadString(); case BsonType.Int32: return bsonReader.ReadInt32().ToString(); default: var message = string.Format("ZipCodeSerializer expects to find a String or an Int32, not a {0}.", bsonType); throw new BsonSerializationException(message); } } public override void Serialize(BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options) { if (value == null) { bsonWriter.WriteNull(); } else { bsonWriter.WriteString((string)value); } } } 4 5 BsonClassMap.RegisterClassMap<Address>(cm => { cm.AutoMap(); cm.GetMemberMap(a => a.ZipCode).SetSerializer(new ZipCodeSerializer()); }); 6
2、删除了某个属性
1 var allDocuments = collectionToUpdate .FindAll();foreach(var document in allDocuments ){var oldFieldValue = document ["OldFieldName"];if(!document.Contains("NewFieldName")) document.Add("NewFieldName", oldFieldValue); document.Remove("OldFieldName"); collectionToUpdate.Save(document);} 2 3 3、使用newtonsoft.json转换为json 4 5 class ObjectId Converter:JsonConverter{publicoverridevoidWriteJson(JsonWriter writer,object value,JsonSerializer serializer){ serializer.Serialize(writer, value.ToString());}publicoverrideobjectReadJson(JsonReader reader,Type objectType,object existingValue,JsonSerializer serializer){thrownewNotImplementedException();}publicoverride bool CanConvert(Type objectType){returntypeof(ObjectId).IsAssignableFrom(objectType);//return true;}} 6 7 public class ObjectIdConverter : TypeConverter 8 9 { 10 11 public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) 12 13 { 14 15 if (sourceType == typeof(string)) 16 17 { 18 19 return true; 20 21 } 22 23 return base.CanConvertFrom(context, sourceType); 24 25 } 26 27 public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) 28 29 { 30 31 if (value is string) 32 33 return ObjectId.Parse((string)value); 34 35 return base.ConvertFrom(context, culture, value); 36 37 } 38 39 // Overrides the ConvertTo method of TypeConverter. 40 41 public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) 42 43 { 44 45 if (destinationType == typeof(string)) 46 47 { 48 49 return ((ObjectId)value).ToString(); 50 51 } 52 53 return base.ConvertTo(context, culture, value, destinationType); 54 55 } 56 57 } 58
使用:[TypeConverter(typeof(ObjectIdConverter))]
4、实体中排除某些字段,不写入到集合中
publicclassMyClass{ [BsonIgnore]publicstringSomeProperty{get;set;}}
或者使用初始化代码的形式,设置映射关系
BsonClassMap.RegisterClassMap<MyClass>(cm=>{cm.AutoMap();cm.UnmapProperty(c=>c.SomeProperty);});
5、在连接参数中设置用户名和密码
http://docs.mongodb.org/ecosystem/tutorial/authenticate-with-csharp-driver/
6、mongodb中时间为当前小时数 减 8
分 析:存储在mongodb中的时间是标准时间UTC +0:00 而咱们中国的失去是+8.00 。
解决方法:在datetime属性上增加特性
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime Birth{get;set;}
欢迎在评论区留下你宝贵的意见,不论好坏都是我前进的动力(cnblogs 排名提升)!
如果喜欢,记得点赞、推荐、关注、收藏、转发 ... ;)