.net core3.1中使用 MongoDB.Driver 實現基礎的增刪改查操作(含分頁)。
模型
public class Person
{
public ObjectId Id { get; set; }
//[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime Created { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string JumpUrl { get; set; }
public int ReadingNum { get; set; }
public PersonType Type { get; set; }
}
public enum PersonType
{
類型1 = 1,
類型2 = 2,
}
增刪改查操作
MongoDB操作鏈接及相關字段:
private static readonly MongoClient client = new MongoClient("mongodb://admin:[email protected]:27017");
private static readonly string dbName = "test";
private static readonly string collectionName = "person";
private static readonly IMongoDatabase database = client.GetDatabase(dbName);
private static readonly IMongoCollection<Person> collection = database.GetCollection<Person>(collectionName);
初始化集合:
public static void Init()
{
//創建集合
var listCollections = database.ListCollectionNames().ToList();
if (!listCollections.Contains(dbName))
database.CreateCollection(collectionName);
}
寫入:
public static void Write()
{
var database = client.GetDatabase(dbName);
var collection = database.GetCollection<Person>(collectionName);
collection.InsertOne(new Person
{
Title = "孫治民",
Description = "今天下着雨~,我的心情真開心~",
Created = DateTime.Now,
JumpUrl = "hospital.xiayeyun.com",
ReadingNum = 0,
Type = PersonType.類型2
});
}
查詢:
public static void Read()
{
#region 方式一
//var list = collection.Find(x => x.Title == "孫治民").Skip(0).Limit(10).SortByDescending(x => x.Created).ToList();
#endregion
#region 方式二
var filterDic = new Dictionary<string, object> { { "Title", "孫治民" } };
var filter = new BsonDocument(filterDic);
var list = collection.Find(filter).Skip(0).Limit(10).SortByDescending(x => x.Created).ToList();
#endregion
}
更新:
public static void Update(ObjectId id)
{
var doc = collection.Find(x => x.Id == id).Skip(0).Limit(1).ToList();
if (!doc.Any())
return;
var updateBuilder = Builders<Person>.Update;
#region 方式一,動態添加需要更新的字段
//var updates = new List<UpdateDefinition<Person>>();
//updates.Add(updateBuilder.Set(x => x.Title, "update"));
//updates.Add(updateBuilder.Set(x => x.Created, DateTime.Now));
//updates.Add(updateBuilder.Set(x => x.Description, "update test"));
//var update = updateBuilder.Combine(updates);
//collection.UpdateOne(x => x.Id == id, update);
#endregion
#region 方式二,一次更新多個固定字段
var update = updateBuilder.Set(x => x.Title, "update2")
.Set(x => x.Created, DateTime.Now)
.Set(x => x.Description, "update2 test2");
#endregion
UpdateResult result = collection.UpdateOne(x => x.Id == id, update);
}
刪除:
public static void Delete(ObjectId id)
{
DeleteResult result = collection.DeleteOne(x => x.Id == id);
}