作者:崔维安 | 来源:互联网 | 2018-07-13 12:16
+Driver+Tutorial笔记首先下载驱动。驱动有两个文件MongoDB.Bson.dllMongoDB.Driver.dll可以直接下载这两个驱动,或者按照下载源码进行编译生成。下载的源码可以看些test例子。在新建的c#工程中添加这两个dll文件,并且使用如下命名空间至少要引用如
+Driver+Tutorial 笔记 首先下载驱动。驱动有两个文件 MongoDB.Bson.dll MongoDB.Driver.dll 可以直接下载这两个驱动,或者按照下载源码进行编译生成。下载的源码可以看些test例子。 在新建的c#工程中添加这两个dll文件,并且使用如下命名空间 至少要引用如
+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类型不能转成相应的数字的时候,会抛出异常。
隐式的转化
下面的数据类型可以直接转化
比如下面
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)
上面是用的比较多