MongoDB C# Driver 管理快速入門指南

如何在 Windows 上安裝 MongoDB
MongoDB C# Driver 快速入門指南

這是 MongoDB 驅(qū)動(dòng)快速入門的第二部分,我們可以看到一些管理層面的方法臀脏。在第一部分中,我們介紹了如何執(zhí)行一些簡(jiǎn)單的CRUD操作。

Setup

下面的例子呀闻,介紹了如何快速創(chuàng)建和鏈接client databasecollection 變量。

var client = new MongoClient();
var database = client.GetDatabase("foo");
var collection = client.GetCollection<BsonDocument>("bar");

標(biāo)注:

client 中調(diào)用 GetDatabase 方法不會(huì)創(chuàng)建相應(yīng)的數(shù)據(jù)庫(kù)潜慎,相同的捡多,在 database 中調(diào)用 GetCollection 方法也不會(huì)創(chuàng)建相應(yīng)的集合。只有當(dāng)數(shù)據(jù)被寫入成功的時(shí)候铐炫,相應(yīng)的 databasecollection 才會(huì)被創(chuàng)建垒手。比如創(chuàng)建索引或?qū)⑽臋n插入之前不存在的集合中。

List the Databases

你可以使用 ListDatabases 或者 ListDatabasesAsync 方法獲取到所有數(shù)據(jù)的集合倒信。

using (var cursor = client.ListDatabases())
{
    foreach (var document in cursor.ToEnumerable())
    {
        Console.WriteLine(document.ToString()));
    }
}
using (var cursor = await client.ListDatabasesAsync())
{
    await cursor.ForEachAsync(document => Console.WriteLine(document.ToString()));
}
Drop a Database

你可以使用 DropDatabase 或者 DropDatabaseAsync 方法刪除相應(yīng)的數(shù)據(jù)庫(kù)淫奔。

client.DropDatabase("foo");
await client.DropDatabaseAsync("foo");
Create a Collection

一個(gè)數(shù)據(jù)庫(kù)中的集合會(huì)被自動(dòng)創(chuàng)建,直到該集合首次插入一個(gè)文檔堤结。使用 CreateCollection 或者 CreateCollectionAsync 方法,你可以創(chuàng)建一個(gè)指定自定義大小的蓋子集合鸭丛。例如竞穷,創(chuàng)建一個(gè)1MB大小的蓋子集合:

var options = new CreateCollectionOptions { Capped = true, MaxSize = 1024 * 1024 };
database.CreateCollection("cappedBar", options);
await database.CreateCollectionAsync("cappedBar", options);
Drop a Collection

你可以使用 DropCollection 或者 DropCollectionAsync 方法去刪除一個(gè)集合:

database.DropCollection("cappedBar");
await database.DropCollectionAsync("cappedBar");
Create an Index

MongoDB數(shù)據(jù)庫(kù)支持二級(jí)索引. 你可以對(duì)指定一個(gè)字段創(chuàng)建索引,也可以對(duì)多個(gè)字段結(jié)合創(chuàng)建復(fù)合索引鳞溉,并為每個(gè)字段指定一個(gè)排序方式瘾带。1 表示升序,-1 表示降序熟菲。下面的例子將為字段 i 創(chuàng)建了一個(gè)升序的索引:

collection.Indexes.CreateOne(new BsonDocument("i", 1));
// or
var keys = Builders<BsonDocument>.IndexKeys.Ascending("i");
collection.Indexes.CreateOne(keys);
await collection.Indexes.CreateOneAsync(new BsonDocument("i", 1));
// or
var keys = Builders<BsonDocument>.IndexKeys.Ascending("i");
await collection.Indexes.CreateOneAsync(keys);

更多關(guān)于索引字段定義構(gòu)造器參見 reference section

List the Indexes in a Collection

使用 List 或者 ListAsync 方法列舉集合中的索引:

using (var cursor = collection.Indexes.List())
{
    foreach (var document in cursor.ToEnumerable())
    {
        Console.WriteLine(document.ToString());
    }
}
using (var cursor = await collection.Indexes.ListAsync())
{
    await cursor.ForEachAsync(document => Console.WriteLine(document.ToString()));  
}

上面的例子將會(huì)打印下面的信息:

{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "mydb.test" }
{ "v" : 1, "key" : { "i" : 1 }, "name" : "i_1", "ns" : "mydb.test" }
Text Indexes

MongoDB 數(shù)據(jù)庫(kù)同樣支持文本搜索索引看政。文本索引可以在字段值類型為字符串的字段或者字符串類型數(shù)組上創(chuàng)建。下面舉例在集合中為“text”字段創(chuàng)建文本索引:

collection.Indexes.CreateOne(new BsonDocument("content", "text"));

// or

var keys = Builders<BsonDocument>.IndexKeys.Text("content");
collection.Indexes.CreateOne(keys);
await collection.Indexes.CreateOneAsync(new BsonDocument("content", "text"));

// or

var keys = Builders<BsonDocument>.IndexKeys.Text("content");
await collection.Indexes.CreateOneAsync(keys);

在MongoDB 2.6中抄罕,文本索引現(xiàn)在已經(jīng)集成到主查詢語言中允蚣,并且默認(rèn)啟用:

// 插入一些文檔
collection.InsertMany(new []
{
    new BsonDocument("_id", 0).Add("content", "textual content"),
    new BsonDocument("_id", 1).Add("content", "additional content"),
    new BsonDocument("_id", 2).Add("content", "irrelevant content"),
});

// 使用文本索引找到它們
var filter = Builders<BsonDocument>.Filter.Text("textual content -irrelevant");
var matchCount = collection.Count(filter);
Console.WriteLine("Text search matches: {0}", matchCount);

// 使用文本索引和$語言操作符找到它們
var englishFilter = Builders<BsonDocument>.Filter.Text("textual content -irrelevant", "english");
var matchCount = collection.Count(filter);
Console.WriteLine("Text search matches (english): {0}", matchCount);

// 找到最高得分的比賽
var projection = Builders<BsonDocument>.Projection.MetaTextScore("score");
var doc = collection.Find(filter).Project(projection).First();
Console.WriteLine("Highest scoring document: {0}", doc);
// 插入一些文檔
await collection.InsertManyAsync(new []
{
    new BsonDocument("_id", 0).Add("content", "textual content"),
    new BsonDocument("_id", 1).Add("content", "additional content"),
    new BsonDocument("_id", 2).Add("content", "irrelevant content"),
});

// 使用文本索引找到它們
var filter = Builders<BsonDocument>.Filter.Text("textual content -irrelevant");
var matchCount = await collection.CountAsync(filter);
Console.WriteLine("Text search matches: {0}", matchCount);

// 使用文本索引和$語言操作符找到它們
var englishFilter = Builders<BsonDocument>.Filter.Text("textual content -irrelevant", "english");
var matchCount = await collection.CountAsync(filter);
Console.WriteLine("Text search matches (english): {0}", matchCount);

// 找到最高得分的比賽
var projection = Builders<BsonDocument>.Projection.MetaTextScore("score");
var doc = await collection.Find(filter).Project(projection).FirstAsync();
Console.WriteLine("Highest scoring document: {0}", doc);

以上將會(huì)打印出:

Text search matches: 2
Text search matches (english): 2
Highest scoring document: { "_id" : 1, "content" : "additional content", "score" : 0.75 }

想要獲取更多關(guān)于文本查詢的信息,參見 文本索引文本查詢操作 呆贿。

Running a Command

不是所有的命令都有明確的幫助器嚷兔,不過,你可以通過 RunCommand 或者 RunCommandAsync 來執(zhí)行所有的命令做入。例如我們可以通過如下的方式:

var buildInfoCommand = new BsonDocument("buildinfo", 1);
var result = database.RunCommand(buildInfoCommand);
var result = await database.RunCommandAsync(buildInfoCommand);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冒晰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竟块,更是在濱河造成了極大的恐慌壶运,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浪秘,死亡現(xiàn)場(chǎng)離奇詭異蒋情,居然都是意外死亡埠况,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門恕出,熙熙樓的掌柜王于貴愁眉苦臉地迎上來询枚,“玉大人,你說我怎么就攤上這事浙巫〗鹗瘢” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵的畴,是天一觀的道長(zhǎng)渊抄。 經(jīng)常有香客問我,道長(zhǎng)丧裁,這世上最難降的妖魔是什么护桦? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮煎娇,結(jié)果婚禮上二庵,老公的妹妹穿的比我還像新娘。我一直安慰自己缓呛,他們只是感情好催享,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哟绊,像睡著了一般因妙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上票髓,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天攀涵,我揣著相機(jī)與錄音,去河邊找鬼洽沟。 笑死以故,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裆操。 我是一名探鬼主播据德,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼跷车!你這毒婦竟也來了棘利?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤朽缴,失蹤者是張志新(化名)和其女友劉穎善玫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡茅郎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蜗元,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片系冗。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奕扣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掌敬,到底是詐尸還是另有隱情惯豆,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布奔害,位于F島的核電站楷兽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏华临。R本人自食惡果不足惜芯杀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望雅潭。 院中可真熱鬧揭厚,春花似錦、人聲如沸扶供。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诚欠。三九已至,卻和暖如春漾岳,著一層夾襖步出監(jiān)牢的瞬間轰绵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工尼荆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留左腔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓捅儒,卻偏偏與公主長(zhǎng)得像液样,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巧还,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容