在.Net Core中使用MongoDB的入門教程(二)
阿新 • • 發佈:2018-12-24
在上一篇文章中,講到了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點關門,我現在還在公司,要回去了,下回再接著給大家分享。