mongodbの簡単な紹介

54629 ワード

mongodbって何?
MongoDBはC++言語で作成され、分散ファイルストレージに基づくオープンソースデータベースシステムです.高負荷の場合、より多くのノードを追加することで、サーバのパフォーマンスを保証できます.MongoDBは、WEBアプリケーションに拡張性の高い高性能データストレージソリューションを提供することを目的としています.MongoDBは、キー値(key=>value)のペアからなるデータ構造を持つドキュメントとしてデータを格納します.MongoDBドキュメントはJSONオブジェクトに似ています.フィールド値には、他のドキュメント、配列、およびドキュメント配列を含めることができます.
主な特徴
MongoDBはドキュメントストレージ向けのデータベースで、操作が簡単で簡単です.MongoDBレコードでは、FirstName=「Sameer」、Address=「8 Gandhi Road」など、任意の属性のインデックスを設定して、より迅速なソートを実現できます.ローカルまたはネットワークからデータミラーを作成できます.これにより、MongoDBの拡張性が向上します.負荷の増加(より多くの記憶領域とより強い処理能力が必要)があれば、コンピュータネットワーク内の他のノードに分散することができます.これがいわゆるスライスです.Mongoは豊富なクエリー式をサポートしています.クエリー命令はJSON形式のタグを使用して、ドキュメントに埋め込まれているオブジェクトと配列を簡単にクエリーできます.MongoDbはupdate()を使用します.コマンドは、置換が完了したドキュメント(データ)または指定されたデータフィールドを実装します.MongodbのMap/reduceは、主にデータを一括処理および集約するために使用されます.MapおよびReduce.Map関数は、emit(key,value)を呼び出して、セット内のすべてのレコードを巡回し、keyとvalueをReduce関数に渡して処理します.Map関数とReduce関数はJavascriptを用いて記述され、dbを通過することができる.runCommandまたはmapreduceコマンドは、MapReduce操作を実行します.GridFSはMongoDBに内蔵された機能で、大量の小さなファイルを格納することができます.MongoDBはサービス側でスクリプトを実行することを許可し、Javascriptである関数を記述し、直接サービス側で実行することもできるし、関数の定義をサービス側に保存し、次回直接呼び出すこともできる.MongoDBは、RUBY、PYTHON、JAVA、C++、PHP、C#など、さまざまなプログラミング言語をサポートしています.MongoDBのインストールは簡単です.
WindowsプラットフォームのインストールMongoDB
リンクインストールmongodbを参照
Mongdbのいくつかの概念
SQL用語/概念
MongoDB用語/概念
説明/説明
database
database
データベース#データベース#
table
collection
データベース・テーブル/コレクション
row
document
データレコード行/ドキュメント
column
field
データフィールド/ドメイン
index
index
索引
table
joins
テーブル接続、MongoDBはサポートされていません
primary key
primary key
メインキー、MongoDBが自動的に_idフィールドをプライマリキーに設定
操作
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.qpx</groupId>
    <artifactId>upms-producer-mongodb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>upms-producer-mongodb</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.qpx</groupId>
            <artifactId>common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

注入mongoTemplate
@Autowired
MongoTemplate mongoTemplate;

追加操作(挿入)
	List<SysUser> userList = new ArrayList<>();
	
	userList.add(new SysUser(11,"1","   ","18888888888"));
	userList.add(new SysUser(9,"1","   ","13333333333"));
	userList.add(new SysUser(5,"1","   ","14444444444"));
	userList.add(new SysUser(6,"1","   ","15555555555"));
	userList.add(new SysUser(7,"1","   ","16666666666"));
	
	mongoTemplate.insert(userList, "userList");	//             (  ),          ;    


	SysUser sysUser = new SysUser(12,"1","   ","18888888888");
	mongoTemplate.insert(sysUser, "userList");	//             (  ),          mongo   
  
	SysUser sysUser = new SysUser(12,"1","   ","18888888888");
	mongoTemplate.save(sysUser);	//           (  );save()

注意:同じmongoコレクションで、前後に挿入されたデータ・オブジェクト・タイプが一致するエンティティ・クラスには、MySQLのデータ・テーブルに相当するMongoDBのドキュメント・セットであることを示す注釈で識別する必要があります.ここでcollectionはコレクション名を表し、書かないとデフォルトではエンティティクラス名
//   author yinjihuan   
	Query query = Query.query(Criteria.where("author").is("yinjihuan"));
	mongoTemplate.remove(query, Article.class);
 	//       MongoDB    
	query = Query.query(Criteria.where("author").is("yinjihuan"));
	mongoTemplate.remove(query, "article_info");
 	//     ,     ,      
	mongoTemplate.dropCollection(Article.class);
	mongoTemplate.dropCollection("article_info");
 	//      ;    ,                   ;                    
	mongoTemplate.getDb().dropDatabase();

次の2つは、いくつかのデータを削除するかを知るのに適したシーンです.
//             ,           ,       
	query = Query.query(Criteria.where("author").is("yinjihuan"));
	Article article = mongoTemplate.findAndRemove(query, Article.class);
 //            ,             
	query = Query.query(Criteria.where("author").is("yinjihuan"));
	List<Article> articles = mongoTemplate.findAllAndRemove(query, Article.class);
 

修正操作
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate     ",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate     ",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

最初のauthorがyinjihuanのデータのtitleとvisitCountを変更
Query query = Query.query(Criteria.where("author").is("yinjihuan"));
Update update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateFirst(query, update, Article.class);

修正の結果、次のようになります.最初のデータのtitleとvisit_が見つかります.countが修正されました
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
    "title": "MongoTemplate",
    "url": "http://cxytiandi.com/blog/detail/0",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 10,
    "add_time": ISODate("2016-08-29T13:46:21.881Z")
}
{
    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
    "title": "MongoTemplate     ",
    "url": "http://cxytiandi.com/blog/detail/1",
    "author": "yinjihuan",
    "tags": [
        "java",
        "mongodb",
        "spring"
    ],
    "visit_count": 0,
    "add_time": ISODate("2016-08-29T13:46:22.201Z")
}

すべての条件を満たす
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").set("visitCount", 10);
mongoTemplate.updateMulti(query, update, Article.class);

修正の結果、すべてのデータのtitleとvisit_が見つかります.countが修正されました
{
	    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
	    "title": "MongoTemplate",
	    "url": "http://cxytiandi.com/blog/detail/0",
	    "author": "yinjihuan",
	    "tags": [
	        "java",
	        "mongodb",
	        "spring"
	    ],
	    "visit_count": 10,
	    "add_time": ISODate("2016-08-29T13:46:21.881Z")
	}
	{
	    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
	    "title": "MongoTemplate",
	    "url": "http://cxytiandi.com/blog/detail/1",
	    "author": "yinjihuan",
	    "tags": [
	        "java",
	        "mongodb",
	        "spring"
	    ],
	    "visit_count": 10,
	    "add_time": ISODate("2016-08-29T13:46:22.201Z")
	}

特別な更新は、authorがjasonのデータであることを更新し、authorがjasonのデータでない場合は、この条件に基づいて新しいデータを作成します.条件に合致するドキュメントがない場合は、この条件と更新ドキュメントに基づいて新しいドキュメントを作成し、一致するドキュメントが見つかったら正常に更新します.
query = Query.query(Criteria.where("author").is("jason"));
	update = Update.update("title", "MongoTemplate").set("visitCount", 10);
	mongoTemplate.upsert(query, update, Article.class);

//        ,            
	{
	    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
	    "title": "MongoTemplate",
	    "url": "http://cxytiandi.com/blog/detail/0",
	    "author": "yinjihuan",
	    "tags": [
	        "java",
	        "mongodb",
	        "spring"
	    ],
	    "visit_count": 10,
	    "add_time": ISODate("2016-08-29T13:46:21.881Z")
	}
	{
	    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
	    "title": "MongoTemplate",
	    "url": "http://cxytiandi.com/blog/detail/1",
	    "author": "yinjihuan",
	    "tags": [
	        "java",
	        "mongodb",
	        "spring"
	    ],
	    "visit_count": 10,
	    "add_time": ISODate("2016-08-29T13:46:22.201Z")
	}
	{
	    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
	    "author": "jason",
	    "title": "MongoTemplate",
	    "visit_count": 10
	}

更新条件は変更されず、更新フィールドは私たちの集合に存在しないものに変更され、setメソッドで更新されたkeyが存在しない場合、新しいkeyが作成されます.
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").set("money", 100);
mongoTemplate.updateMulti(query, update, Article.class);

//        ,          key
	{
	    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
	    "author": "jason",
	    "title": "MongoTemplate",
	    "visit_count": 10,
	    "money":100
	}

updateのincメソッドは累積操作に用いられ,moneyを以前のベースに100を加える
query = Query.query(Criteria.where("author").is("jason"));
	update = Update.update("title", "MongoTemplate").inc("money", 100);
	mongoTemplate.updateMulti(query, update, Article.class);


//        ,     money  200
	{
	    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
	    "author": "jason",
	    "title": "MongoTemplate",
	    "visit_count": 10,
	    "money":200
	}

updateのrenameメソッドはkeyの名前を変更するために使用されます
query = Query.query(Criteria.where("author").is("jason"));
	update = Update.update("title", "MongoTemplate").rename("visitCount", "vc");
	mongoTemplate.updateMulti(query, update, Article.class);

//       ,      visitCount      vc
	{
	    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
	    "author": "jason",
	    "title": "MongoTemplate",
	    "vc": 10,
	    "money":200
	}

   update unset      key
query = Query.query(Criteria.where("author").is("jason"));
update = Update.update("title", "MongoTemplate").unset("vc");
mongoTemplate.updateMulti(query, update, Article.class);

//        ,     vc  key    
	{
	    "_id": ObjectId("57c6e1601e4735b2c306cdb7"),
	    "author": "jason",
	    "title": "MongoTemplate",
	    "money":200
	}

updateのpullメソッドtags配列のjavaを削除する
query = Query.query(Criteria.where("author").is("yinjihuan"));
update = Update.update("title", "MongoTemplate").pull("tags", "java");
mongoTemplate.updateMulti(query, update, Article.class);

//        ,     tags  java    
	{
	    "_id": ObjectId("57c43caed4c63d7e39b5dc48"),
	    "title": "MongoTemplate",
	    "url": "http://cxytiandi.com/blog/detail/0",
	    "author": "yinjihuan",
	    "tags": [
	        "mongodb",
	        "spring"
	    ],
	    "visit_count": 10,
	    "add_time": ISODate("2016-08-29T13:46:21.881Z")
	}
	{
	    "_id": ObjectId("57c43caed4c63d7e39b5dc49"),
	    "title": "MongoTemplate",
	    "url": "http://cxytiandi.com/blog/detail/1",
	    "author": "yinjihuan",
	    "tags": [
	        "mongodb",
	        "spring"
	    ],
	    "visit_count": 10,
	    "add_time": ISODate("2016-08-29T13:46:22.201Z")
	}

クエリー操作MongoDBのクエリー方法は多くありますが、以下には、一般的に使用されるクエリーのみがいくつか列挙されています.たとえば、    1、=クエリー   2、あいまいクエリー   3、範囲より大きいクエリー  4、inクエリー   5、orクエリー 8195  6、クエリー1つ、クエリーすべて 作者がすべての条件に合致するデータをクエリーし、Listに戻る
Query query = Query.query(Criteria.where("author").is("yinjihuan"));
List<Article> articles = mongoTemplate.find(query, Article.class);

条件を満たす最初のデータのみをクエリーし、Articleオブジェクトを返します.
query = Query.query(Criteria.where("author").is("yinjihuan"));
Article article = mongoTemplate.findOne(query, Article.class);

クエリー・セット内のすべてのデータ、条件なし
articles = mongoTemplate.findAll(Article.class);

クエリが条件に一致する数
query = Query.query(Criteria.where("author").is("yinjihuan"));
	long count = mongoTemplate.count(query, Article.class);

プライマリ・キーIDによるクエリー
article = mongoTemplate.findById(new ObjectId("57c6e1601e4735b2c306cdb7"), Article.class);

inクエリー
List<String> authors = Arrays.asList("yinjihuan", "jason");
query = Query.query(Criteria.where("author").in(authors));
articles = mongoTemplate.find(query, Article.class);

ne(!=)クエリー
query = Query.query(Criteria.where("author").ne("yinjihuan"));
	articles = mongoTemplate.find(query, Article.class);

lt(
query = Query.query(Criteria.where("visitCount").lt(10));
	articles = mongoTemplate.find(query, Article.class);

範囲クエリー、5より大きくて10未満
query = Query.query(Criteria.where("visitCount").gt(5).lt(10));
	articles = mongoTemplate.find(query, Article.class);

ファジイクエリ、authorにaを含むデータ
query = Query.query(Criteria.where("author").regex("a"));
	articles = mongoTemplate.find(query, Article.class);

配列クエリー、クエリーtagsの数が3のデータ
query = Query.query(Criteria.where("tags").size(3));
	articles = mongoTemplate.find(query, Article.class);

orクエリー、author=jasonまたはvisitCount=0のデータをクエリー
query = Query.query(Criteria.where("").orOperator(
	    Criteria.where("author").is("jason"),
	    Criteria.where("visitCount").is(0)));
	articles = mongoTemplate.find(query, Article.class);