>  기사  >  백엔드 개발  >  .Net에서 MongoDB를 사용하는 자세한 예를 공유하세요.

.Net에서 MongoDB를 사용하는 자세한 예를 공유하세요.

零下一度
零下一度원래의
2017-05-24 17:25:252351검색

최근 온라인에서 mongodb를 검색해 보니 .net에서 mongodb를 사용하는 방법에 대한 글이 초기 드라이버 버전이거나 정보가 거의 없어서 이를 자세하게 소개하고자 에세이를 작성했습니다. .Net에서 mongodb 사용법 MongoDB 사용법에 대한 튜토리얼이 필요한 친구들은 아래를 참고하세요.

MongoDB란 무엇입니까

MongoDB는 테이블이 아닌 문서 저장소를 기반으로 하며 관계형 데이터베이스와 비관계형 데이터베이스의 교차점입니다. 데이터베이스 그 중 제품은 비관계형 데이터베이스 중에서 가장 기능이 풍부하고 관계형 데이터베이스와 가장 유사한 제품입니다. 지원하는 데이터 구조는 매우 느슨하고 json과 유사한 bson 형식이므로 더 복잡한 데이터 유형을 저장할 수 있습니다. Mongo의 가장 큰 특징은 지원하는 쿼리 언어가 매우 강력하다는 것입니다. 구문이 객체 지향 쿼리 언어와 다소 유사하며 관계형 데이터베이스의 단일 테이블 쿼리와 유사한 대부분의 기능을 구현할 수 있으며 인덱싱도 지원합니다. 데이터. Mongo는 주로 대용량 데이터의 액세스 효율성 문제를 해결합니다. Mongo는 주로 대용량 데이터 스토리지를 지원하기 때문에 Mongo에는 대용량 데이터 스토리지를 지원할 수 있는 뛰어난 분산 파일 시스템인 GridFS도 함께 제공됩니다. Mongo는 복잡한 데이터 구조를 지원할 수 있고 강력한 데이터 쿼리 기능을 가지고 있기 때문에 매우 인기가 있습니다.

BSON은 MongoDB의 데이터 저장 형식입니다. JSON은 누구나 잘 알고 있지만 BSON은 JSON 형식을 기반으로 합니다. 변환을 위해 JSON을 선택하는 주된 이유는 JSON의 다양성과 스키마가 없는 특성 때문입니다.

BSON의 특징은 다음과 같습니다.

1. 더 빠른 탐색 속도

일반적으로 JSON 형식의 경우 말하자면 JSON 구조가 너무 크면 데이터 탐색 속도가 매우 느려집니다. JSON에서는 데이터 읽기를 위해 문서를 건너뛰려면 문서를 스캔하고 대괄호 일치와 같은 번거로운 데이터 구조 일치를 수행해야 합니다. BSON이 JSON에 비해 크게 개선된 점은 각 요소의 길이가 저장된다는 점입니다. 요소의 헤더에 있으므로 요소의 길이만 읽으면 읽기 위해 지정된 지점을 직접 찾을 수 있습니다.

2. 더 쉬워진 작업

JSON의 경우 데이터 저장은 유형이 지정되지 않습니다. 예를 들어 한 문자에서 10으로 기본 값을 수정하려고 합니다. 두 개이므로 그 뒤에 있는 모든 콘텐츠를 한 위치 뒤로 이동해야 할 수도 있습니다. BSON을 사용하면 이 열을 숫자 열로 지정할 수 있습니다. 그런 다음 숫자가 9에서 10 또는 100으로 늘어나더라도 숫자가 저장된 비트만 수정하므로 데이터의 전체 길이가 변경되지 않습니다. 더 커지다. 물론 MongoDB에서는 숫자가 정수에서 긴 정수로 증가하면 전체 데이터 길이는 계속 늘어납니다.

3. 추가 데이터 유형 추가

JSON은 매우 편리한 데이터 교환 형식이지만 그 유형이 상대적으로 제한되어 있습니다. BSON은 이를 기반으로 "바이트 배열" 데이터 유형을 추가합니다. 이렇게 하면 바이너리 데이터를 JSON에 저장하기 전에 base64로 변환할 필요가 없습니다. 계산 오버헤드와 데이터 크기가 크게 줄어듭니다. 물론 때로는 유형 개념으로 인해 BSON이 JSON에 비해 공간 이점이 없는 경우도 있습니다.

Windows에서 MongoDB 설치

MongoDB 설치는 매우 간단하게 설치 경로를 설정한 후 설치가 완료될 때까지 Next를 유지하면 된다. 가장 큰 함정은 MongoDB 서비스 설치에 대해 MongoDB 설치 후 몇 가지 구성 작업에 대해 자세히 설명하겠습니다

1. 데이터베이스 경로(데이터 디렉터리), 로그 경로(로그 디렉터리), 로그 파일을 생성합니다. (mongo.log 파일) 루트 디렉터리), 구성 경로(conf 디렉터리) 내 설치 경로는 D:Program Filesmongodb

2. conf 디렉터리에 구성 파일 mongo.conf를 만듭니다.

logpath=D:\Program Files\mongodb\logs\mongodb.log #日志输出文件路径

logappend=true #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件

journal=true #启用日志文件,默认启用

quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

port=27017 #端口号 默认为27017

auth=true #启用验证 需要用户名密码

구성 완료 위의 2단계로 MongoDB를 시작할 수 있습니다.

CMD 입력 명령 실행(mongod 경로 참고)

mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf"

3. MongoDB 서비스

매번 단계를 따르면 3단계처럼 조작하는 것이 꽤 번거롭지 않나요? Windows 서비스


mongod --config " D:\Program Files\mongodb\data \conf\mongo.conf" --install --serviceName "MongoDB"

net start MongoDB

테스트에 성공하면 브라우저에 http://localhost:27017/ 을 입력하면 아래와 같은 그림이 나타나면 해당 서비스를 의미합니다. 설치 성공

MongoDB 서비스를 제거해야 하는 경우 CMD에서 실행


mongod.exe --remove --serviceName "MongoDB"

후 준비 작업이 완료되면 코딩을 시작할 수 있습니다

.net에서 MongoDB 사용 방법

먼저 MongoDB.Bson.dll, MongoDB를 소개합니다. Driver.dll, MongoDB.Driver.Core.dll 버전 2.0을 사용하고 있습니다. 현재 많은 기사에서 버전 1+의 사용을 소개하고 있습니다. 코딩 시작

코드 일부는 다음과 같습니다

private static MongoClient client;

private static IMongoDatabase database;

//本地配置

private const string MongoDBConnectionStr = "mongodb://localhost";

//数据库名称

private static string DefaultDataBaseName = "Test";

 

 

public MongoDBHelper()

{

 GetConnection(DefaultDataBaseName);

}

 

/// <summary>

/// 构造函数 指定数据库

/// </summary>

/// <param name="dataBaseName"></param>

public MongoDBHelper(string dataBaseName)

{

 GetConnection(dataBaseName);

}

 
private static void GetConnection(string dataBaseName)

{

 client = new MongoClient(MongoDBConnectionStr);

 database = client.GetDatabase(dataBaseName);

}

/// <summary>

/// 异步插入一条数据,手动输入collection name

/// </summary>

public Task InsertAsync<T>(string collectionName, T obj)

{
 if (database == null)

 {

  throw new Exception("没有指定数据库");

 }

 var collection = database.GetCollection<T>(collectionName);

 return collection.InsertOneAsync(obj);

}

 

/// <summary>

/// 异步插入一条数据,采用类型T的完全限定名作为collection name

/// </summary>

public Task InsertAsync<T>(T obj)

{

 return InsertAsync(typeof(T).FullName, obj);

}

 
/// <summary>

/// 异步插入多条数据,手动输入collection name

/// </summary>

public Task BatchInsertAsync<T>(string collectionName, IEnumerable<T> objs)

{

 if (database == null)

 {

  throw new Exception("没有指定数据库");

 }

 if (objs == null)

 {

  throw new ArgumentException();

 }

 var collection = database.GetCollection<T>(collectionName);

 return collection.InsertManyAsync(objs);

}

 

/// <summary>

/// 异步插入多条数据,采用类型T的完全限定名作为collection name

/// </summary>

public Task BatchInsertAsync<T>(IEnumerable<T> objs)

{

 return BatchInsertAsync(typeof(T).FullName, objs);

}

 

/// <summary>

/// 插入一条数据

/// </summary>

public void Insert<T>(T obj)

{

 InsertAsync(obj).Wait();

}

 

/// <summary>

/// 插入多条数据

/// </summary>

public void Insert<T>(IEnumerable<T> objs)

{

 BatchInsertAsync(objs).Wait();

}

/// <summary>

/// MongoDB C# Driver的Find方法,返回IFindFluent。手动输入collection name

/// </summary>

public IFindFluent<T, T> Find<T>(string collectionName, FilterDefinition<T> filter, FindOptions options = null)

{

 if (database == null)

 {
  throw new Exception("没有指定数据库");

 }
 var collection = database.GetCollection<T>(collectionName);

 return collection.Find(filter, options);

}

/// <summary>

/// MongoDB C# Driver的Find方法,返回IFindFluent。采用类型T的完全限定名作为collection name

/// </summary>

public IFindFluent<T, T> Find<T>(FilterDefinition<T> filter, FindOptions options = null)

{

 return Find(typeof(T).FullName, filter, options);

}
/// <summary>

/// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc

/// </summary>

public List<T> Get<T>(Expression<Func<T, bool>> condition, int skip, int limit, string sort)

{

 return Get(new List<Expression<Func<T, bool>>> { condition }, skip, limit, sort);

}

public List<T> Get<T>(Expression<Func<T, bool>> condition)

{
 return Get(condition, 0, 0, null);

}

/// <summary>

/// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc

/// </summary>

public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions, int skip, int limit, string sort)

{

 if (conditions == null || conditions.Count == 0)

 {

  conditions = new List<Expression<Func<T, bool>>> { x => true };

 }

 var builder = Builders<T>.Filter;

 var filter = builder.And(conditions.Select(x => builder.Where(x)));

 var ret = new List<T>();

 try

 {

  List<SortDefinition<T>> sortDefList = new List<SortDefinition<T>>();

  if (sort != null)

  {

   var sortList = sort.Split(&#39;,&#39;);

   for (var i = 0; i < sortList.Length; i++)

   {
    var sl = Regex.Replace(sortList[i].Trim(), @"\s+", " ").Split(&#39; &#39;);

    if (sl.Length == 1 || (sl.Length >= 2 && sl[1].ToLower() == "asc"))

    {

     sortDefList.Add(Builders<T>.Sort.Ascending(sl[0]));

    }

    else if (sl.Length >= 2 && sl[1].ToLower() == "desc")

    {

     sortDefList.Add(Builders<T>.Sort.Descending(sl[0]));
    }

   }
  }

  var sortDef = Builders<T>.Sort.Combine(sortDefList);

  ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result;

 }

 catch (Exception e)

 {

  //异常处理

 }

 return ret;

}

public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions)

{

 return Get(conditions, 0, 0, null);

}

샘플 코드에서는 삽입 및 조회 기능만 구현되어 있으며, 전체 코드는 나중에 업로드

요약

이 글은 가장 MongoDB의 기본적인 사용법만을 기록한 레플리카 레벨, 마스터-슬레이브 자동 백업 등입니다. 메커니즘과 구현 방법은 나중에 소개하겠습니다.

[관련 추천]

1. ASP.NET 무료 동영상 튜토리얼

Python을 사용하여 MONGODB 시작하기

3. PyMongo 라이브러리를 사용하여 Python으로 MongoDB 데이터베이스를 운영하는 방법

위 내용은 .Net에서 MongoDB를 사용하는 자세한 예를 공유하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.