设为首页 收藏本站
查看: 683|回复: 0

[经验分享] MongoDB C#驱动

[复制链接]

尚未签到

发表于 2015-7-7 08:25:40 | 显示全部楼层 |阅读模式
烟波钓徒





MongoDB C#驱动




  http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial
  笔记
  首先下载驱动。驱动有两个文件


  • MongoDB.Bson.dll
  • MongoDB.Driver.dll
  可以直接下载这两个驱动,或者按照下载源码进行编译生成。下载的源码可以看些test例子。
  在新建的c#工程中添加这两个dll文件,并且使用如下命名空间
  至少要引用如下命名空间

using MongoDB.Bson;
using MongoDB.Driver;
另外使用比较多的命名空间是
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using MongoDB.Driver.Linq;
  
  另外有些可能会用得到的命名空间

using MongoDB.Bson.IO;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson.Serialization.Conventions;
using MongoDB.Bson.Serialization.IdGenerators;
using MongoDB.Bson.Serialization.Options;
using MongoDB.Bson.Serialization.Serializers;
using MongoDB.Driver.Wrappers;

BSON类库
BSON是类似JSON的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。它也是MongoDB文档数据库内部的数据存储方式。
BsonType

public enum BsonType {
Double = 0x01,
String = 0x02,
Document = 0x03,
Array = 0x04,
Binary = 0x05,
Undefined = 0x06,
ObjectId = 0x07,
Boolean = 0x08,
DateTime = 0x09,
Null = 0x0a,
RegularExpression = 0x0b,
JavaScript = 0x0d,
Symbol = 0x0e,
JavaScriptWithScope = 0x0f,
Int32 = 0x10,
Timestamp = 0x11,
Int64 = 0x12,
MinKey = 0xff,
MaxKey = 0x7f
}
  BsonValue和子类
  BsonValue是一种代表BsonType的虚拟类。它是BsonType枚举类的凝聚子类。
  ·可以使用public构造函数生成BsonValue子类
  ·使用静态create函数生成
  ·Use a static property of a subclass of BsonValue(静态的子类属性?)
  ·隐式转换成BsonValue
  BsonType的类型
  可以用下面的例子代码确认BsonValue的属性

BsonValue value;
if (value.BsonType == BsonType.Int32) {
// we know value is an instance of BsonInt32
}
if (value is BsonInt32) {
// another way to tell that value is a BsonInt32
}
if (value.IsInt32) {
// the easiest way to tell that value is a BsonInt32
}

  As[Type] Properties
  BsonValue有一系列转换方式将它的类型cast(抛)(而不是conversion)成与.NET相匹配的数据类型。如果他不是一个.NET相对应的数据属性,它将会抛出一个InvalidCastException 异常。下面是一些将数据转变的方式。

BsonDocument document;
string name = document["name"].AsString;//As方式,类似转变
int age = document["age"].AsInt32;
BsonDocument address = document["address"].AsBsonDocument;
string zip = address["zip"].AsString;

  Is[Type] Properties
  使用下面例子测试BsonValues是什么类型

BsonDocument document;
int age = -1;
if (document.Contains["age"] && document["age"].IsInt32) {//Is 是否为Int32类型
age = document["age"].AsInt32;
}
To[Type] 转变方法
与As不同,To是用于可以转变类型之间的转类型。比如int和double之间。
比如ToBoolen方法永远不会失败。它是按照javascript里面定义的。false, 0, 0.0, NaN, BsonNull, BsonUndefined 以及"" 是false,其他所有都是true。
if (employee["ismanager"].ToBoolean()) {
// we know the employee is a manager
// works with many ways of recording boolean values
}
ToDouble、ToInt32、以及ToInt64在数字之间的转变都不会失败。即使数字长度不匹配被缩短了都不会照成函数错误。string类型可以转成数字类型。但是如果string类型不能转成相应的数字的时候,会抛出异常。
隐式的转化
下面的数据类型可以直接转化

  • bool
  • byte[]
  • DateTime
  • double
  • Enum
  • Guid
  • int
  • long
  • ObjectId
  • Regex
  • string
  比如下面

BsonValue b = true; // b is an instance of BsonBoolean
BsonValue d = 3.14159; // d is an instance of BsonDouble
BsonValue i = 1; // i is an instance of BsonInt32
BsonValue s = "Hello"; // s is an instance of BsonString

  BsonMaxKey, BsonMinKey, BsonNull and BsonUndefined
  这些数据类型是单个的类,要用到这些数据,需要使用各自的类来生成

document["status"] = BsonNull.Value;
document["priority"] = BsonMaxKey.Value;
注意,这个c#的null和BsonNull是两个完全不同的东西。BsonNull是一个C#类,它的Value属性是null。所以他们在函数构造不同。

ObjectId and BsonObjectId
一些常用的创建ObjectId 值的方式
var id1 = new ObjectId(); // same as ObjectId.Empty
var id2 = ObjectId.Empty; // all zeroes
var id3 = ObjectId.GenerateNewId(); // generates new unique Id
var id4 = ObjectId.Parse("4dad901291c2949e7a5b6aa8"); // parses a 24 hex digit string

  在C#里面,刚创建的值默认都是零的。但是在javascript里面会创建一个唯一的值。
  BsonElement

(Bson元素)
Bson元素是一个name/value的键值对。
document.Add(new BsonElement("age", 21)); // OK, but next line is shorter
document.Add("age", 21); // creates BsonElement automatically


  BsonDocument

BsonDocument是name/value键值对的集合。
BsonDocument构造函数

  • BsonDocument()
  • BsonDocument(string name, BsonValue value)
  上面是用的比较多


  • BsonDocument(BsonElement element)
  • BsonDocument(Dictionary dictionary)
  • BsonDocument(Dictionary dictionary, IEnumerable keys)
  • BsonDocument(IDictionary dictionary)
  • BsonDocument(IDictionary dictionary, IEnumerable keys)
  • BsonDocument(IDictionary dictionary)
  • BsonDocument(IDictionary dictionary, IEnumerable keys)
  • BsonDocument(IEnumerabe elements)
  • BsonDocument(params BsonElement[] elements)
  • BsonDocument(bool allowDuplicateNames)
  创建一个新的document并且调用Add和Set函数

BsonDocument book = new BsonDocument();
book.Add("author", "Ernest Hemingway");
book.Add("title", "For Whom the Bell Tolls");

另外一种方式
BsonDocument book = new BsonDocument()
.Add("author", "Ernest Hemingway")
.Add("title", "For Whom the Bell Tolls");

使用c#的collection初始化语法(推荐)
BsonDocument book = new BsonDocument {
{ "author", "Ernest Hemingway" },
{ "title", "For Whom the Bell Tolls" }
};
编译器会将它翻译成调用Add函数的方式
    BsonDocument book = new BsonDocument();
book.Add("author", "Ernest Hemingway");
book.Add("title", "For Whom the Bell Tolls");
不要缺少里面的大括号,不然就会像下面一样
BsonDocument bad = new BsonDocument {
"author", "Ernest Hemingway"
};
编译成:
BsonDocument bad = new BsonDocument();
bad.Add("author");
bad.Add("Ernest Hemingway");

创建嵌套的BSON documents
BsonDocument nested = new BsonDocument {
{ "name", "John Doe" },
{ "address", new BsonDocument {
{ "street", "123 Main St." },
{ "city", "Centerville" },
{ "state", "PA" },
{ "zip", 12345}
}}
};
”address”是一个嵌套的document

  ADD函数


  • Add(BsonElement element)
  • Add(Dictionary dictionary)
  • Add(Dictionary dictionary, IEnumerable keys)
  • Add(IDictionary dictionary)
  • Add(IDictionary dictionary, IEnumerable keys)
  • Add(IDictionary dictionary)
  • Add(IDictionary dictionary, IEnumerable keys)
  • Add(IEnumerable elements)
  • Add(string name, BsonValue value)
  • Add(string name, BsonValue value, bool condition)
  如果里面的属性值是null的话,add函数将不把数据加入到document中

BsonDocument document = new BsonDocument {
{ "name", name },
{ "city", city }, // not added if city is null
{ "dob", dob, dobAvailable } // not added if dobAvailable is false
};
可以翻译成如下:
BsonDocument document = new BsonDocument();
document.Add("name", name);
if (city != null) {
document.Add("city", city);
}
if (dobAvailable) {
document.Add("dob", dob);
}
如果想add一个BsonNull值,可以使用C#中的null联合
BsonDocument = new BsonDocument {
{ "city", city ?? BsonConstants.Null }
};

获取BsonDocument的元素elements

  • BsonValue this[int index]
  • BsonValue this[string name]
  • BsonValue this[string name, BsonValue defaultValue]
  返回的是BsonValue值,例子如下

BsonDocument book;
string author = book["author"].AsString;
DateTime publicationDate = book["publicationDate"].AsDateTime;
int pages = book["pages", -1].AsInt32; // default value is -1


  BsonArray
  这个类是用来表示BSON 数组。
  构造函数


  • BsonArray()
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  • BsonArray(IEnumerable values)
  Add 和 AddRange 函数


  • BsonArray Add(BsonValue value)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)
  • BsonArray AddRange(IEnumerable values)

// traditional approach
BsonArray a1 = new BsonArray();
a1.Add(1);
a2.Add(2);
// fluent interface
BsonArray a2 = new BsonArray().Add(1).Add(2);
// values argument
int[] values = new int[] { 1, 2 };
BsonArray a3 = new BsonArray(values);
// collection initializer syntax
BsonArray a4 = new BsonArray { 1, 2 };

  
  访问

BsonArray array = new BsonArray { "Tom", 39 };
string name = array[0].AsString;
int age = array[1].AsInt32;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83938-1-1.html 上篇帖子: mongodb中关于中文乱码问题的处理 下篇帖子: Mongodb数据库入门之Spring Mongodb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表