MongoDBは、分散ファイル・ストレージベースのデータベースです。C ++言語で書かれました。WEBアプリケーションのためのスケーラブルで高性能データ・ストレージ・ソリューションを提供するために設計されています。
MongoDBは、リレーショナルデータベースのような豊かな、最も間のリレーショナルデータベースと非リレーショナルデータベース、非リレーショナルデータベース機能との機能を持つ製品です。
MongoDBのを使用してどのようなシナリオの下で
MongoDBはNoSQLの(非リレーショナルデータベース)が、実際の使用は、リレーショナルデータベースとして使用することができますが、
MySQLデータベースおよび単一のテーブル内のデータの他、大容量の後、フィールドは非常に苦痛で展開したい、それは非常にカードでなければなりません長い間、この時間は、2つの選択肢のいずれかのレベルのセグメンテーション・データベースに直面し、または大量のデータを格納するためのNoSQLを使用しなければならない、ログストレージとしてMongoDBは拡大に非常に助長している、ならびにデータ分析など柔軟なデータソースのMongoDBとして使用することができますこれは、保存されています。
MongoDBの分析概念
MongoDBの基本的な考え方では、文書、コレクション、データベースは、ここで私たちは一つ一つを紹介することです。
SQLの用語/コンセプト | 用語&MongoDBの/コンセプト | 解説/説明 |
---|---|---|
データベース | データベース | データベース |
テーブル | コレクション | データベースのテーブル/コレクション |
行 | 資料 | データ行/ドキュメント |
行 | フィールド | データフィールド/フィールド |
指数 | 指数 | 指数 |
テーブルには、参加します | 表参加、MongoDBはサポートしていません。 | |
主キー | 主キー | 主キーは、MongoDBは自動的に主キーとしてフィールドを_id |
データベース
MongoDBは、複数のデータベースを作成することができます。
デフォルトのデータベースMongoDBは「DB」、データベースはデータディレクトリに格納されています。
MongoDBの単一のインスタンスは、個々の複数のデータベースを収容することができる、独自のアクセス許可のセットと各異なるデータベースは、異なるファイル内に配置されています。
「ショーのDBSは、」すべてのデータの一覧を表示するコマンド。
セット
テーブル(リレーショナルデータベース管理システムリレーショナル・データベース管理システム):MongoDBはRDBMSに類似した文書群のコレクションです。
コレクションは、データベースにあなたは異なるフォーマットや種類のデータの収集に挿入することができることを意味していない固定構造のコレクションが存在するが、通常我々はいくつかの関連性を持つことになり、データのセットを挿入します。
例えば、我々は、コレクションに挿入された異なるデータ構造を文書化することができます:
{ "サイト": "www.baidu.com"}
、{ "サイト": "www.google.com"、 "名": "Googleの"}
、{ "サイト": "www.runoob.com"、 "名前" 「新人チュートリアル」、「NUM」:5}
最初の文書が挿入されたとき、セットが作成されます。
リーガルコレクション名
コレクション名が空の文字列にすることはできません「」
コレクション名は\ 0文字(ヌル文字)を含めることはできません、この文字はコレクション名の末尾を表します。
コレクション名は、「システム。」予約収集システムのための接頭辞で始まり、時にすることはできません。
ユーザーが作成したコレクション名は、予約文字を含めることはできません。一部のドライバは、コレクションは、いくつかのシステムで生成された文字が含まれているため、これは、セットに含ま支援があったん。あなたは、システムによって作成されたこのコレクションにアクセスする場合を除き、または内部の$名には表示されません。
ドキュメント(文書)
文書は(すなわちBSON)用のキーセット(キーと値)です。MongoDBのの文書が同じフィールドを設定する必要はありません、同じフィールドとリレーショナルデータベースとは非常に異なっている同じデータ型を必要としない、MongoDBは非常に顕著な特徴です。
次の表は、RDBMSと、対応するターム&MongoDBのを示しています。
RDBMS | MongoDBの |
---|---|
データベース | データベース |
テーブル | セット |
行 | ファイル |
行 | フィールド |
表組合 | 埋め込みドキュメント |
主キー | 主キー(キーMongoDBは_idを提供するために) |
それに注意してください。
ドキュメントのキー/値のペアを注文しています。
バリュー文書は、データのいくつかの他のタイプ(あるいは全体埋め込ま文書)とすることができるだけでなく、二重引用符内の文字列の内部かもしれません。
MongoDBはタイプと敏感に分化します。
MongoDBのドキュメントには、重複キーを持つことができません。
キー文書は文字列です。いくつかの例外を除いて、キーは任意のUTF-8文字です。
キーの命名規則を文書化します:
キーは\ 0(ヌル文字)を含めることはできません。この文字は、債券の終わりを示すために使用されます。
。$特別な意味を持ち、特定の状況でのみ使用することができます。
キーの先頭に「_」アンダースコア(厳密には必要ではない)に予約されています。
MongoDBのデータ型
次の表MongoDBのいくつかの一般的に使用されるデータ型。
データの種類 | 説明 |
---|---|
弦 | 文字列。データを格納する一般的に使用されるデータ型。MongoDBのでは、UTF-8エンコードされた文字列は有効です。 |
整数 | 整数値。値を格納するために使用されます。あなたが使用しているサーバーは、32ビットまたは64ビットに分けることができます。 |
ブーリアン | ブール値。ブール値(真/偽)を格納します。 |
ダブル | 倍精度浮動小数点値。浮動小数点値を格納するために使用されます。 |
最小/最大キー | 最高値の値BSON(バイナリJSON)要素と相対比の最小値。 |
アレイ | 1つ以上の値の配列またはリストをキーとして格納されています。 |
タイムスタンプ | タイムスタンプ。変更または追加したレコードは、特定の時間を記録します。 |
オブジェクト | 埋め込まれたドキュメントの場合。 |
ヌル | null値を作成するため。 |
シンボル | シンボル。実質的にデータ型文字列型に相当し、その差は、それは一般的に言語の種類を使用し、特殊な記号を使用していることです。 |
日付 | 日付と時刻。UNIXの時刻の形式は、現在の日付や時刻を格納するために使用されます。あなたはあなた自身の日付と時刻を指定することができますDateオブジェクトを作成し、日付情報を渡します。 |
オブジェクトID | オブジェクトID。IDは、文書を作成するために使用されます。 |
バイナリデータ | バイナリデータ。バイナリデータを格納します。 |
コード | コードタイプ。JavaScriptコードは、ドキュメントを格納するために使用されます。 |
正規表現 | 正規表現のタイプ。これは、正規表現を格納するために使用されます。 |
ObjectId
同様のObjectId一意のキーは、すぐに12バイトを含み、生成およびソートする、意味は次のとおりです。
- 作成するための最初の4バイト のUNIX タイムスタンプを、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; }
}
}
CRUD操作の詳細を見ることができる公式ドキュメントを