1. 程式人生 > >在.Net Core中使用MongoDB的入門教程(二)

在.Net Core中使用MongoDB的入門教程(二)

在上一篇文章中,講到了MongoDB在匯入驅動、MongoDB的連線,資料的插入等。

本篇文章將接著上篇文章進行介紹MongoDB在.Net Core中的使用,建議看這篇文章之前,先看上面一篇文章。

另外,今天在安裝MongoDB資料庫的時候,居然卡在了下一步幾乎花了兩三個小時才安裝好,可能這一步要蠻多時間,大家遇到了不要心急,耐心等待。


7.查詢資料

查詢資料中,分三種進行敘述,第一種,獲取第一條資料,第二種,獲取所有資料,第三種,獲取指定條件下的資料

7.1查詢集合中的第一條資料

查詢集合中的第一條資料,需要用到的是FistOrDefault方法或者FistOrDefaultAsync方法,當有資料時,返回資料的第一條或者預設的那條,當沒有資料時,返回null 以下方法分別展示了在同步和非同步的方法下查詢並打印出資料。
var document = collection.Find(new BsonDocument()).FirstOrDefault();
Console.WriteLine(document.ToString());

var document = await collection.Find(new BsonDocument()).FirstOrDefaultAsync();
Console.WriteLine(document.ToString());

此時,返回的是我們在上一篇文章中插入的第一條資料:
{ 
    "_id": ObjectId("551582c558c7b4fbacf16735") },
    "name": "MongoDB", 
    "type": "database", 
    "count": 1,
    "info": { "x" : 203, "y" : 102 } 
}

我們注意到,在我們插入資料的時候,並沒有給資料設定id,id元素已被MongoDB自動地插入到資料中了。

7.2查詢數資料集中的所有資料。

要查詢資料集中的所有資料,可以使用ToList或者ToListAsync方法,需要注意的是,這種在預期返回資料較少的時候使用。 以下是同步和非同步方法獲取所有資料。
var documents = collection.Find(new BsonDocument()).ToList();
var documents = await collection.Find(new BsonDocument()).ToListAsync();

獲取到了資料後,我們可以使用foreach的方法遍歷得到每一個數據的值。 如果返回的資料預期很大,建議採用以下非同步的迭代的方法處理。
await collection.Find(new BsonDocument()).ForEachAsync(d => Console.WriteLine(d));

如果是在要用同步的方法,那麼可以使用ToEnumerable介面卡方法。
var cursor = collection.Find(new BsonDocument()).ToCursor();
foreach (var document in cursor.ToEnumerable())
{
    Console.WriteLine(document);   
}


7.3用過濾器篩選獲取單個數據

可以通過建立一個過濾器來傳遞給Find方法來獲取我們需要的的那個子集,然後用Fist方法,獲取第一條資料。 首先,建立一個篩選器。
var filter = Builders<BsonDocument>.Filter.Eq("i", 71);

以上篩選器表示篩選i=71的資料。 然後,通過同步或者非同步的方法來查詢符合該條件的資料。
var document = collection.Find(filter).First();
Console.WriteLine(document);

var document = await collection.Find(filter).FirstAsync();
Console.WriteLine(document);
因為我們在Find()後,呼叫了Fist方法,所以獲取的只是一條資料,如果不呼叫該函式,則獲取的是一個數據集合。 如果我們要獲取的是大於或者小於某值的資料集,那麼久可以不用Fist()方法了

比如,獲取i>50的資料,我們先設計一個這樣的篩選器。
var filter = Builders<BsonDocument>.Filter.Gt("i", 50);

然後,查詢符合該條件的所有資料並輸出。 同步方法:
var cursor = collection.Find(filter).ToCursor();
foreach (var document in cursor.ToEnumerable())
{
    Console.WriteLine(document);   
}
非同步方法:
await collection.Find(filter).ForEachAsync(document => Console.WriteLine(document));


如果是50<i<=100,我們可以設計一個這樣的篩選器。
var filterBuilder = Builders<BsonDocument>.Filter;
var filter = filterBuilder.Gt("i", 50) & filterBuilder.Lte("i", 100);

然後和上文中同樣的方法應用該篩選器並把資料輸出。 同步方法:
var cursor = collection.Find(filter).ToCursor();
foreach (var document in cursor.ToEnumerable())
{
    Console.WriteLine(document);   
}
非同步方法:
await collection.Find(filter).ForEachAsync(document => Console.WriteLine(document));

一看時間,已經22.44了,我們寢室23點關門,我現在還在公司,要回去了,下回再接著給大家分享。