1. 程式人生 > 程式設計 >C# 操作 MongoDB的示例demo

C# 操作 MongoDB的示例demo

今專案使用Mongodb,C#操作MongoDB使用MongoDB.Driver.dll庫(Nuget),寫了個小Demo,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using MongoDB.Driver;

namespace MongoBase
{
  internal class MongoBase
  {
    private static string _connStr = "mongodb://root:[email protected]:27017";
    private static string _dbName = "test";

    private static MongoUrl url = new MongoUrl(_connStr);
    private static MongoClient client = new MongoClient(url);
    public static IMongoDatabase db = client.GetDatabase(_dbName);
  }

  public class MongoHelper<TEntity>
  {
    public string Name => typeof(TEntity).Name;
    public IMongoCollection<TEntity> Collection => MongoBase.db.GetCollection<TEntity>(Name);
    public List<TEntity> Queryable => Collection.AsQueryable().ToList();

    public FilterDefinitionBuilder<TEntity> Filter => Builders<TEntity>.Filter;

    public UpdateDefinitionBuilder<TEntity> Update => Builders<TEntity>.Update;

    public ProjectionDefinitionBuilder<TEntity>Projection=> Builders<TEntity>.Projection;
  }


}
using System;
using System.Collections.Generic;
using System.Text;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace MongoBase
{
  public class EntityBase
  {
    public EntityBase()
    {
      _id = ObjectId.GenerateNewId();
      createTime = DateTime.Now;
      isDelete = false;
      id = _id.ToString();
    }
    [BsonId]
    public ObjectId _id { get; set; }
    public string id { get; set; }

    public DateTime? createTime { get; set; }

    public bool? isDelete { get; set; }


  }

}
using MongoBase;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace ConsoleApp5
{
  internal class Video : EntityBase
  {
    public string Title { get; set; }

    public string Category { get; set; }

    public int Minutes { get; set; }

    public string Comments { get; set; }
  }
}
using System;
using System.Collections.Generic;
using MongoBase;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Linq;


namespace ConsoleApp5
{
  class Program
  {
    static void Main(string[] args)
    {
      MongoHelper<Video> videoHelper = new MongoHelper<Video>();

      //新增
      videoHelper.Collection.InsertOne(new Video()
      {
        Title = "ggg"
      });
      //查詢集合
      var list = videoHelper.Collection.Find(videoHelper.Filter.Eq(e => e.Category,"Horror")).ToList();

      list = videoHelper.Collection.Find(videoHelper.Filter.Eq(e => e.Title,"ggg")).ToList();

      //方式一:拼接查詢條件
      List<FilterDefinition<Video>> listFilter = new List<FilterDefinition<Video>>()
      {
        videoHelper.Filter.Eq(e=>e.Minutes,118),videoHelper.Filter.Eq(e=>e.Title,"The Perfect Developer")
      };

      //根據查詢多個條件篩選集合
      list = videoHelper.Collection.Find(videoHelper.Filter.And(listFilter)).ToList();

      //方式二:拼接查詢條件
      var filter = videoHelper.Filter.Eq(e => e.Title,"cys") & videoHelper.Filter.Eq(e => e.Category,"cys");

      list = videoHelper.Collection.Find(filter).ToList();

      //拼接更新欄位
      var updateDefinition = new List<UpdateDefinition<Video>>()
      {
        videoHelper.Update.Set(e=>e.Title,"cys"),videoHelper.Update.Set(e=>e.Category,"cys")
      };

      //按照條件更新
      videoHelper.Collection.UpdateMany(videoHelper.Filter.And(listFilter),videoHelper.Update.Combine(updateDefinition));

      //刪除
      videoHelper.Collection.DeleteOne(videoHelper.Filter.Eq(e => e.Title,"Lost In Frankfurt am Main"));

      //獲取某個欄位
      filter = videoHelper.Filter.Eq(e => e.Title,"ggg");
      var bson = videoHelper.Collection.Find(filter).Project(videoHelper.Projection.Include(e => e.Title).Exclude(e => e._id)).FirstOrDefault();
    }
  }
}

注:時間型別的屬性,存入MongoDB後會比北京時間少8小時,是由於預設寫入的是世界標準時間,可在時間型別屬性上新增

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime createTime { get; set; }

的特性,這樣取出來之後就是北京時間。

以上就是C# 操作 MongoDB的示例demo的詳細內容,更多關於C# 操作 MongoDB的資料請關注我們其它相關文章!