【转载】 mongodb C# 基本类库

本教程适用 C# Driver version v1.4.x,主要介绍2个类库:BSON & c#驱动,BSON 类库也是可以独立适用的,c#驱动类库是需要BSON类库支持的。

 

还有另外一个版本的教程   C#版 驱动 简单教程

 

引用命名空间

    MongoDB.Bson.dll
    MongoDB.Driver.dll

上面是运行的基本引用
还有以下的一些引用,在相应的时候用

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特定类型的定义

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 是一个抽象类,代表了一个输入Bson的值

BsonValue 有如下子类

    BsonArray
    BsonBinaryData
    BsonBoolean
    BsonDateTime
    BsonDocument
    BsonDouble
    BsonInt32
    BsonInt64
    BsonJavaScript
    BsonJavaScriptWithScope (a subclass of BsonJavaScript)
    BsonMaxKey
    BsonMinKey
    BsonNull
    BsonObjectId
    BsonRegularExpression
    BsonString
    BsonSymbol
    BsonTimestamp
    BsonUndefined


可以用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] 属性

   AsBoolean (=> bool)
    AsBsonArray
    AsBsonBinaryData
    AsBsonDateTime
    AsBsonDocument
    AsBsonJavaScript // also works if BsonType == JavaScriptWithScope
    AsBsonJavaScriptWithScope
    AsBsonMaxKey
    AsBsonMinKey
    AsBsonNull
    AsBsonRegularExpression
    AsBsonSymbol
    AsBsonTimestamp
    AsBsonUndefined
    AsBsonValue
    AsByteArray (=> byte[])
    AsDateTime (=> DateTime)
    AsDouble (=> double)
    AsGuid (=> Guid)
    AsInt32 (=> int)
    AsInt64 (=> long)
    AsNullableBoolean (=> bool?)
    AsNullableDateTime (=> DateTime?)
    AsNullableDouble (=> double?)
    AsNullableGuid (=> Guid?)
    AsNullableInt32 (=> int?)
    AsNullableInt64 (=> long?)
    AsNullableObjectId (=> ObjectId?)
    AsObjectId (=> ObjectId)
    AsRegex (=> Regex)
    AsString (=> string)


例子:

BsonDocument document;
string name = document["name"].AsString;
int age = document["age"].AsInt32;
BsonDocument address = document["address"].AsBsonDocument;
string zip = address["zip"].AsString;



Is[Type]属性

    IsBoolean
    IsBsonArray
    IsBsonBinaryData
    IsBsonDateTime
    IsBsonDocument
    IsBsonJavaScript
    IsBsonJavaScriptWithScope
    IsBsonMaxKey
    IsBsonMinKey
    IsBsonNull
    IsBsonRegularExpression
    IsBsonSymbol
    IsBsonTimestamp
    IsBsonUndefined
    IsDateTime
    IsDouble
    IsGuid
    IsInt32
    IsInt64
    IsNumeric (true if type is Double, Int32 or Int64)
    IsObjectId
    IsString

例子

BsonDocument document;
int age = -1;
if (document.Contains["age"] && document["age"].IsInt32) {
    age = document["age"].AsInt32;
}


To[Type] 转换方法

    ToBoolean
    ToDouble
    ToInt32
    ToInt64

例子:

if (employee["ismanager"].ToBoolean()) {
    // we know the employee is a manager
    // works with many ways of recording boolean values

}

隐式转换

    bool
    byte[]
    DateTime
    double
    Enum
    Guid
    int
    long
    ObjectId
    Regex
    string


BsonMaxKey, BsonMinKey, BsonNull and BsonUndefined

document["status"] = BsonNull.Value;
document["priority"] = BsonMaxKey.Value;



BsonElement

document.Add(new BsonElement("age", 21)); // OK, but next line is shorter
document.Add("age", 21); // creates BsonElement automatically



BsonDocument 


有三种方法创建
1.调用构造方法方式添加方法
2.通过平滑接口设置
3.c#的集合初始化


BsonDocument 构造方法

    BsonDocument()
    BsonDocument(string name, BsonValue value)
    BsonDocument(BsonElement element)
    BsonDocument(Dictionary<string, object> dictionary)
    BsonDocument(Dictionary<string, object> dictionary, IEnumerable<string> keys)
    BsonDocument(IDictionary dictionary)
    BsonDocument(IDictionary dictionary, IEnumerable<string> keys)
    BsonDocument(IDictionary<string, object> dictionary)
    BsonDocument(IDictionary<string, object> dictionary, IEnumerable<string> keys)
    BsonDocument(IEnumerabe<BsonElement> elements)
    BsonDocument(params BsonElement[] elements)
    BsonDocument(bool allowDuplicateNames)

前两个方法是常用的


创建一个 BsonDocument 

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#的集合初始化

BsonDocument book = new BsonDocument {
    { "author", "Ernest Hemingway" },
    { "title", "For Whom the Bell Tolls" }
};


创建嵌套 BSON documents

BsonDocument nested = new BsonDocument {
    { "name", "John Doe" },
    { "address", new BsonDocument {
        { "street", "123 Main St." },
        { "city", "Centerville" },
        { "state", "PA" },
        { "zip", 12345}
    }}
};


Add  方法

    Add(BsonElement element)
    Add(Dictionary<string, object> dictionary)
    Add(Dictionary<string, object> dictionary, IEnumerable<string> keys)
    Add(IDictionary dictionary)
    Add(IDictionary dictionary, IEnumerable<string> keys)
    Add(IDictionary<string, object> dictionary)
    Add(IDictionary<string, object> dictionary, IEnumerable<string> keys)
    Add(IEnumerable<BsonElement> elements)
    Add(string name, BsonValue value)
    Add(string name, BsonValue value, bool condition)

有些时候要根据条件添加 

例如:
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);
}



访问 BsonDocument elements

    BsonValue this[int index]
    BsonValue this[string name]
    BsonValue this[string name, BsonValue defaultValue]
返回的值是 BsonValue  而不是BsonElement,如果想获得 BsonElements  ,可以用GetElement方法

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



BsonArray
BsonArray和BsonDocument 没有任何隶属关系。他们有不同的用处

BsonArray构造方法

    BsonArray()
    BsonArray(IEnumerable<bool> values)
    BsonArray(IEnumerable<BsonValue> values)
    BsonArray(IEnumerable<DateTime> values)
    BsonArray(IEnumerable<double> values)
    BsonArray(IEnumerable<int> values)
    BsonArray(IEnumerable<long> values)
    BsonArray(IEnumerable<ObjectId> values)
    BsonArray(IEnumerable<string> values)
    BsonArray(IEnumerable values)


Add 和 AddRange 方法


    BsonArray Add(BsonValue value)
    BsonArray AddRange(IEnumerable<bool> values)
    BsonArray AddRange(IEnumerable<BsonValue> values)
    BsonArray AddRange(IEnumerable<DateTime> values)
    BsonArray AddRange(IEnumerable<double> values)
    BsonArray AddRange(IEnumerable<int> values)
    BsonArray AddRange(IEnumerable<long> values)
    BsonArray AddRange(IEnumerable<ObjectId> values)
    BsonArray AddRange(IEnumerable<string> 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 };


Indexer

访问BsonArray 也可以使用索引


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

posted @ 2014-04-26 15:53  枯树之花  阅读(655)  评论(0编辑  收藏  举报