MongoDB를 및 C # .netcore 클라이언트 MongoDB.Driver2.9.1 사용 시작하기

MongoDB를 분산 파일 스토리지 기반 데이터베이스입니다. C ++ 언어에 의해 작성된. 웹 애플리케이션을위한 확장 가능한 고성능 데이터 스토리지 솔루션을 제공하도록 설계되었습니다.
MongoDB를 관계형 데이터베이스처럼 부유 한 가장들 관계형 데이터베이스와 비 관계형 데이터베이스, 비 관계형 데이터베이스 기능과 기능을 가진 제품입니다.

MongoDB의를 사용하여 어떤 시나리오에서

MongoDB가되는 NoSQL (비 관계형 데이터베이스)하지만, 실제 사용은 관계형 데이터베이스로 사용할 수 있지만
MySQL 데이터베이스와 하나의 테이블에있는 데이터의 다른 대량 후, 그리고 필드가 매우 고통스러운 확장하려는, 아주 카드이어야한다 오랜 시간 동안,이 시간은 두 가지 선택 수준의 분할 데이터베이스, 또는 엄청난 양의 데이터를 저장할 수없는 NoSQL을 사용 중 하나에 직면해야 로그 스토리지와 같은 MongoDB를 매우 확장에 도움이뿐만 아니라, 데이터 분석 등 유연한 데이터 소스 MongoDB를 사용 할 수있다 그것은 저장됩니다.

MongoDB를 분석 개념

MongoDB의 기본적인 개념은 문서, 수집, 데이터베이스, 우리가 하나 하나 소개하는 것입니다.

SQL 용어 / 개념 용어 MongoDB를 / 개념 설명 / 설명
데이터 베이스 데이터 베이스 데이터베이스
수집 데이터베이스 테이블 / 수집
문서 데이터 행 / 문서
기둥 데이터 필드 / 필드
인덱스 인덱스 색인
테이블 조인 표에 가입, MongoDB를 지원하지 않습니다
기본 키 기본 키 기본 키는 MongoDB를 자동으로 기본 키로 필드를 _ID

데이터베이스

MongoDB를 여러 데이터베이스를 만들 수 있습니다.
기본 데이터베이스는 MongoDB를 데이터베이스는 데이터 디렉토리에 저장됩니다, "DB"입니다.
MongoDB의 단일 인스턴스는 개별 데이터베이스의 다수를 수용 할 수있는, 자신의 권한의 세트와 각각 다른 데이터베이스는 다른 파일에 배치됩니다.
"쇼 DBS는"명령은 모든 데이터의 목록을 표시합니다.

설정

테이블 (관계형 데이터베이스 관리 시스템 관계형 데이터베이스 관리 시스템) : MongoDB를은 RDBMS에 유사한 문서 그룹의 모음입니다.

컬렉션, 데이터베이스에 서로 다른 형식과 유형의 데이터 컬렉션에 삽입 할 수 있다는 것을 의미없는 고정 된 구조의 컬렉션을 존재하지만, 일반적으로 우리는 몇 가지 관련이있을 것이다 데이터 세트를 삽입합니다.

예를 들어, 우리는 컬렉션에 삽입 된 다른 데이터 구조를 문서화 할 수 있습니다 :

{ "사이트": "www.baidu.com"}
{ "사이트": "www.google.com", "이름": "구글"}
{ "사이트": "www.runoob.com", "이름" "신인 가이드", "NUM"5}
제 문서가 삽입되면, 세트가 생성된다.

법률 컬렉션 이름의
컬렉션 이름은 빈 문자열이 될 수 없습니다 "."
컬렉션 이름은 \ 0 문자 (null 문자)를 포함 할 수 없습니다,이 문자는 모음 이름의 끝을 나타냅니다.
컬렉션 이름은 "시스템."예약 된 수집 시스템에 대한 접두어 시작 부분에 수 없습니다.
사용자가 만든 컬렉션 이름은 예약 문자를 포함 할 수 없습니다. 일부 드라이버는 컬렉션이 일부 시스템에서 생성 된 문자가 포함되어 있기 때문입니다, 세트에 포함 지원이 있었다 않습니다. 당신이 시스템에 의해 생성 된이 컬렉션에 액세스 할 않는 한, 또는 내부 $ 이름에 표시되지 않습니다. 

문서 (문서)

문헌 (예 BSON)에 대한 키 세트 (키 - 값)이다. MongoDB의의 문서가 동일한 필드 같은 필드를 설정하는 데 필요하지 않습니다 및 관계형 데이터베이스는 매우 다르다 동일한 데이터 유형을 필요로하지 않습니다, MongoDB를은 매우 눈에 띄는 기능입니다.

다음 표는 RDBMS와 해당 용어 MongoDB를 나열

RDBMS MongoDB를
데이터베이스 데이터베이스
테이블 설정
파일
분야
표 조합 포함 된 문서
기본 키 기본 키 (키 MongoDB를이 _id를 제공하기 위해)

그 참고 :

문서 키 / 값 쌍은 정렬됩니다.
값 문서는 데이터 (또는 전체 포함 된 문서)의 여러 다른 종류의 수 있습니다뿐만 아니라 큰 따옴표로 문자열의 내부에있을 수 있습니다.
종류와 구분을 차별화하여 MongoDB.
MongoDB의 문서는 중복 키를 가질 수 없습니다.
주요 문서는 문자열입니다. 몇 가지 예외를 제외하고, 키는 UTF-8 문자 일 수도있다.
키 명명 규칙을 문서화 :

\ 0 (널 문자)를 포함 할 수 없습니다 키. 이 문자는 채권의 끝을 나타내는 데 사용됩니다.
. $ 특별한 의미를 가지고 특정 상황에서 사용할 수 있습니다.
키의 시작 부분에 "_"밑줄 (엄격하게 요구되지 않음) 예약되어 있습니다.

MongoDB의 데이터 유형

다음 표 MongoDB를 일반적으로 사용되는 여러 데이터 유형.

데이터 유형 기술
문자열입니다. 저장 데이터는 일반적으로 데이터 유형을 사용했다. MongoDB의에서 UTF-8로 인코딩 된 문자열은 합법적이다.
정수 정수 값. 이 값을 저장하는 데 사용됩니다. 당신이 사용하는 서버는 32 비트 또는 64 비트로 나눌 수 있습니다.
부울 부울 값입니다. 부울 값 (참 / 거짓) 기억.
더블 배정 밀도 부동 소수점 값. 부동 소수점 값을 저장하는 데 사용됩니다.
최소 / 최대 키 값 BSON 최고 값 (이진 JSON) 소자와의 상대 비율의 최소치.
정렬 하나 이상의 값을 배열이나리스트는 키로 저장됩니다.
타임 스탬프 타임 스탬프. 수정 또는 추가 기록은 특정 시간을 문서화합니다.
목적 포함 된 문서의 경우.
없는 null 값을 작성하십시오.
상징 기호입니다. 실질적으로 데이터 유형 문자열 유형에 해당하지만, 차이점은 일반적으로 언어의 유형을 사용하는 특수 기호를 사용한다는 것입니다.
데이트 날짜 및 시간입니다. UNIX 시간 형식은 현재 날짜와 시간을 저장하는 데 사용. 당신은 당신의 자신의 날짜와 시간을 지정할 수 있습니다 Date 객체를 만들고, 날짜 정보를 전달합니다.
개체 ID 개체 ID. ID는 문서를 작성하는 데 사용됩니다.
이진 데이터 바이너리 데이터입니다. 이진 데이터를 저장.
암호 코드를 입력합니다. 자바 스크립트 코드는 문서를 저장하는 데 사용됩니다.
정규 표현식 정규 표현식 유형입니다. 그것은 정규 표현식을 저장하는 데 사용.

ObjectId가

유사 ObjectId가 고유 키가 신속하게 12 바이트를 포함, 생성 및 정렬 할, 의미는 다음과 같습니다

  • 첫 번째 4 바이트 생성하는  유닉스  , GMT, 타임 스탬프를  UTC의  시간 8 시간 후에 베이징에 비해
  • 식별 코드의 다음 3 바이트는 기계
  • 프로세스 ID PID하여 이루어지는 다음의 2 바이트
  • 임의의 숫자의 마지막 3 바이트

영상

문서에 저장하여 MongoDB는 _id 키가 있어야합니다. 이 키의 값은 기본의 모든 유형이 될 수 있습니다 ObjectId가

MongoDB의 창 설치

https://www.mongodb.com/download-center/community 다운로드

클라이언트 도구
다음 세 가지를 사용하여이
https://robomongo.org/download [추천 ]
https://www.mongodb.com/download-center/compass [공식이 창에서 기본적으로 설치 ]
https : //로 nosqlbooster.com/downloads

사용 방법

nuget 패키지 소개 MongoDB.Driver을
의 image.png

클라이언트 :
의 image.png

다음은 일반적으로 사용되는 테스트 CRUD입니다

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace MongoDBDemo
{
    /// <summary>
    /// mongodb先创建库 test
    /// 再创建表 testlist
    /// </summary>
    [TestClass]
    public class UnitTest1
    {
        private MongoClient client;
        private IMongoDatabase database;

        public UnitTest1()
        {
            this.client = new MongoClient(new MongoClientSettings { Server = new MongoServerAddress("127.0.0.1", 27017), });
            this.database = client.GetDatabase("test");
        }

        /// <summary>
        /// 查所有记录
        /// </summary>
        [TestMethod]
        public void TestQueryAll()
        {
            var list = database.GetCollection<A>("testlist");
            var result = list.Find("{}").ToList();
        }

        /// <summary>
        /// 基础的查询方式
        /// </summary>
        [TestMethod]
        public void TestQueryBase()
        {
            var collection = database.GetCollection<BsonDocument>("testlist");
            BsonDocument filter = new BsonDocument();

            var s = collection.Find(filter).ToList();

            using (var cursor = collection.FindAsync(filter).Result)
            {
                while (cursor.MoveNextAsync().Result)
                {
                    var batch = cursor.Current;
                    foreach (BsonDocument document in batch)
                    {
                        Console.WriteLine(document.ToJson());
                    }
                }
            }
        }

        /// <summary>
        /// 组装查询语句方式
        /// </summary>
        [TestMethod]
        public void TestQueryBuilders()
        {
            var list = database.GetCollection<A>("testlist");
            var filter = Builders<A>.Filter.Eq(x => x.Name, "b");
            var result = list.Find(filter).ToList();
        }

        /// <summary>
        /// linq asqueryable方式
        /// </summary>
        [TestMethod]
        public void TestQueryLinq()
        {
            var list = database.GetCollection<A>("testlist");
            var result = list.AsQueryable().Where(p => p.Name == "b").ToList();
        }

        [TestMethod]
        public void TestQueryLinq2()
        {
            var list = database.GetCollection<A>("testlist");
            var result = list.Find(p => p.Name == "b").ToList();
        }

        [TestMethod]
        public void TestInsert()
        {
            var list = database.GetCollection<A>("testlist");
            list.InsertOne(new A { Name = "a", Count = 1 });
        }

        [TestMethod]
        public void TestUpdate()
        {
            var list = database.GetCollection<A>("testlist");
            var update = Builders<A>.Update;
            list.UpdateOne(p => p.Name == "a", update.Set("Count", 2));
        }

        [TestMethod]
        public void TestDelete()
        {
            var list = database.GetCollection<A>("testlist");
            list.DeleteOne(p => p.Name == "s");
        }
    }

    //如果不加这个[BsonIgnoreExtraElements]会报错 
    // System.FormatException:“Element '_id' does not match any field or property of class,
    // 也可以加属性 public ObjectId _id { get; set; } 来解决
    [BsonIgnoreExtraElements]
    public class A
    {
        //public ObjectId _id { get; set; }
        public string Name { get; set; }

        public int Count { get; set; }
    }
}

침전물 작업에 대한 자세한 내용을 볼 수 있습니다 공식 문서를

추천

출처www.cnblogs.com/sands/p/11528819.html