Heim > Backend-Entwicklung > C#.Net-Tutorial > .Net Core führt eine Abfrage mit mehreren Bedingungen für MongoDB durch

.Net Core führt eine Abfrage mit mehreren Bedingungen für MongoDB durch

coldplay.xixi
Freigeben: 2020-07-18 16:40:26
nach vorne
4643 Leute haben es durchsucht

.Net Core führt eine Abfrage mit mehreren Bedingungen für MongoDB durch

In der Vergangenheit nutzten alle Projekte grundsätzlich die MySQL-Datenbank. Kürzlich gab es im Projektplan etwas freie Zeit, um das Protokollmodul auf MongoDB zu migrieren, das eine bessere Einfügung/Funktion bietet. Abfrageleistung. Das Schreiben mit mehreren Bedingungen hat wirklich einige Mühe gekostet, deshalb habe ich einen Artikel geschrieben, um es aufzuzeichnen.

Verwandte Lernempfehlungen: C#.Net-Entwicklungsgrafik-Tutorial

1. Vorbereitung

1. Der Installationsprozess wird nicht im Detail beschrieben

2. Referenzpaket hinzufügen

dotnet add package mongodb.bson
dotnet add package mongodb.driver
Nach dem Login kopieren

3. Verbindungskonfiguration zu appsetting.json hinzufügen

"MongodbHost": {
  "Connection": "mongodb://[username]:[password]@[ip]:[port]",
  "DataBase": "[database]",
  "Table": ""
 },
Nach dem Login kopieren

4. Methode zum Abrufen von MongoDBConfig

2. Abfragemethode

Die Abfragemethode hier Wenn es sich um eine einzelne Datenquelle handelt, kann der Host hier extrahiert und zu einem Attribut der Hilfsklasse werden.

public static MongodbHostOptions MongodbConfig()
{
  var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json");

  IConfiguration Configuration = builder.Build();
  var option = Configuration.GetSection("MongodbHost");
  return new MongodbHostOptions { Connection = option["Connection"], DataBase = option["DataBase"], Table = option["Table"] };
}
Nach dem Login kopieren

3. Rufen Sie die Abfragemethode auf 🎜>Hier gibt es auch eine Falle. Die Zeit ist Greenwich-Zeit. Wenn Sie das Zeitattribut definieren, werden Sie feststellen, dass es 0:00 ist , Sie müssen ein Tag hinzufügen

#region FindListByPage 分页查询集合
  /// <summary>
  /// 分页查询集合
  /// </summary>
  /// <param name="filter">查询条件</param>
  /// <param name="pageIndex">当前页</param>
  /// <param name="pageSize">页容量</param>
  /// <param name="count">总条数</param>
  /// <param name="field">要查询的字段,不写时查询全部</param>
  /// <param name="sort">要排序的字段</param>
  /// <returns></returns>
  public static List<T> FindListByPage(FilterDefinition<T> filter, int pageIndex, int pageSize, out int count, string[] field = null, SortDefinition<T> sort = null)
  {
    try
    {
      MongodbHostOptions host = Tools.AppSettingsTools.MongodbConfig();
      host.Table = "WSMessageLog";
      var client = MongodbClient<T>.MongodbInfoClient(host);
      count = Convert.ToInt32(client.CountDocuments(filter));
      //不指定查询字段
      if (field == null || field.Length == 0)
      {
        if (sort == null) return client.Find(filter).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList();
        //进行排序
        return client.Find(filter).Sort(sort).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList();
      }

      //指定查询字段
      var fieldList = new List<ProjectionDefinition<T>>();
      for (int i = 0; i < field.Length; i++)
      {
        fieldList.Add(Builders<T>.Projection.Include(field[i].ToString()));
      }
      var projection = Builders<T>.Projection.Combine(fieldList);
      fieldList?.Clear();

      //不排序
      if (sort == null) return client.Find(filter).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList();

      //排序查询
      return client.Find(filter).Sort(sort).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToList();

    }
    catch (Exception ex)
  {
    throw ex;
  }
}
#endregion
Nach dem Login kopieren

Das OprLogModel ist hier die Klasse, die die Abfragebedingungen definiert

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime logtime { get; set; }
Nach dem Login kopieren

Sie können auch zuerst eine leere Filterdefinition definieren und diese dann mit jeder Abfrage aggregieren Zustand durch Und:

public static LogPager<log_operate> Get_operate_log_mongo(OprLogModel qModel)
{
  LogPager<log_operate> pager = new LogPager<log_operate>();
  FilterDefinition<log_operate> filters;

   var sortbuilder = Builders<log_operate>.Sort;
  var sort = sortbuilder.Descending("operate_time");

  #region 用户权限过滤
  IEnumerable<string> IdList = dev_deviceRepository.GetBinding(qModel.user_id);
   filters = Builders<log_operate>.Filter.In("device_id", IdList);
  #endregion

  if (!string.IsNullOrEmpty(qModel.device_id))
  {
    var filters_did = Builders<log_operate>.Filter.Eq("device_id", qModel.device_id);
    filters = Builders<log_operate>.Filter.And(filters, filters_did);
  }
  if (qModel.sDate != null)
  {
    var filters_sdate = Builders<log_operate>.Filter.Gte<DateTime>("operate_time", Convert.ToDateTime(qModel.sDate));
    filters = Builders<log_operate>.Filter.And(filters, filters_sdate);
  }
  if (qModel.eDate != null)
  {
    var filters_edate = Builders<log_operate>.Filter.Lte<DateTime>("operate_time", Convert.ToDateTime(qModel.eDate));
    filters = Builders<log_operate>.Filter.And(filters, filters_edate);
  }
  int total;
  pager.data = MongoTools<log_operate>.FindListByPage(filters, qModel.pageindex, (qModel.pageindex - 1) * qModel.pagesize, out total, null, sort);
  pager.total = total;
  return pager;
}
#endregion
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt von.Net Core führt eine Abfrage mit mehreren Bedingungen für MongoDB durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage