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을
클라이언트 :
다음은 일반적으로 사용되는 테스트 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; }
}
}
침전물 작업에 대한 자세한 내용을 볼 수 있습니다 공식 문서를