1. はじめに
MongoDB には、データベース、コレクション、ドキュメントという 3 つの重要な用語があります。
データベース: リレーショナル データベースと同様に、各データベースには独自のユーザー権限があり、異なるプロジェクト グループは異なるデータベース
コレクション (コレクション) を使用できます。コレクションはドキュメント グループを指します (Mysql のテーブルの概念に似ています)。ドキュメント グループには多くのドキュメントを保存できます
。ドキュメント): ドキュメントは MongoDB の最も基本的なデータ単位であり、JSON 形式に似たキーと値のペアで構成され、さまざまなフィールドを格納でき、フィールドの値には他のドキュメント、配列、ドキュメント配列を含めることができます。これら 3 つを理解していれば
、今日は、MongoDB と SpringBoot の統合を例として、データの追加、削除、変更、クエリを実現します。
2. コードの練習
2.1. SpringBoot プロジェクトを作成し、MongoDB 依存関係パッケージを追加する
<!-- 引入springboot -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.2. 設定ファイルの追加
application.properties ファイルに mongodb 関連の設定を追加します。
#データベース接続アドレスを設定する
spring.data.mongodb.uri=mongodb://userName:[email protected]:27017/dbName
関連パラメータの説明:
userName: ユーザー名を示します。実際の状況に従って入力できます
。password: ユーザーのパスワードを示します。実際の状況に従って入力できます
。dbName: データベースを示します。カスタマイズ可能で、作成時に自動的に作成されます。データが初期化される
2.3. エンティティクラスの作成
エンティティ クラス Stuinfo を作成します。ここで、注釈 @Document(collection="stuInfo") は、現在のエンティティ クラスに対応するコレクション名が stuInfo であることを示します。これは、リレーショナル データベースのテーブル名に似ています。
注釈 @Id は、コレクション構造の主キー タイプに属する現在のフィールドを示します。
/**
* 使用@Document注解指定集合名称
*/
@Document(collection="stuInfo")
public class StuInfo implements Serializable {
private static final long serialVersionUID = 99999999999999L;
/**
* 使用@Id注解指定MongoDB中的 _id 主键
*/
@Id
private Long id;
private String userName;
private String passWord;
private Integer age;
private Date createTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "StuInfo{" +
"id=" + id +
", userName='" + userName + '\'' +
", passWord='" + passWord + '\'' +
", age=" + age +
", createTime=" + createTime +
'}';
}
}
2.4、MongoDBを操作する
Springboot が MongoDB を操作するには 2 つの方法があります。
1 つ目の方法は、Springboot が公式に推奨している JPA メソッドを使用する方法で、この操作方法は簡単に使用できますが、柔軟性に欠けます。
2つ目は、Spring Data MongoDBを利用し、MongoDBの公式Java APIでカプセル化されたMongoTemplate操作クラスに基づいてMongoDBを操作する方法であり、非常に柔軟性が高く、ほとんどのニーズを満たすことができます。
この記事では 2 番目の方法を使用して紹介します
2.5. ドキュメントの挿入
MongoTemplate はドキュメントを挿入するための insert() メソッドを提供します。サンプル コードは次のとおりです。
書類挿入用
コレクション名が指定されていない場合は、@Document アノテーション内のコレクション名が取得されます。
@Autowired
private MongoTemplate mongoTemplate;
@Test
public void mongoTest(){
try {
StuInfo stuInfo =new StuInfo();
stuInfo.setId(2l);
stuInfo.setUserName("test");
stuInfo.setPassWord("123456");
stuInfo.setCreateTime(new Date());
mongoTemplate.insert(stuInfo);
System.out.println("插入成功");
}catch (Exception ex){
ex.printStackTrace();
}
}
MongoDB Compass ツールを使用して表示できます。
カスタムコレクション名、ドキュメントを挿入
コレクション名を指定するだけです
mongoTemplate.insert(stuInfo,”stuInfo”);
カスタムコレクション、ドキュメントのバッチ挿入
バッチ挿入ドキュメントを使用する場合は、コレクション名を指定する必要があります
List<StuInfo> list =new ArrayList<>();
StuInfo stuInfo =new StuInfo();
stuInfo.setId(3l);
stuInfo.setUserName("test3");
stuInfo.setPassWord("123456");
stuInfo.setCreateTime(new Date());
StuInfo stuInfo1 =new StuInfo();
stuInfo1.setId(4l);
stuInfo1.setUserName("test4");
stuInfo1.setPassWord("123456");
stuInfo1.setCreateTime(new Date());
list.add(stuInfo);
list.add(stuInfo1);
mongoTemplate.insert(list,"stuInfo");
System.out.println("批量插入成功");
2.6. ドキュメントの保存
MongoTemplate は、ドキュメントを保存するための save() メソッドを提供します。
文書を保存する際は主キーIDで判断し、存在する場合は更新、存在しない場合は挿入するサンプルコードは以下の通りです。
挿入されていない場合はドキュメントを保存し、それ以外の場合は主キー ID によって更新します
StuInfo stuInfo =new StuInfo();
stuInfo.setId(2l);
stuInfo.setUserName("修改后的名称");
stuInfo.setPassWord("123123");
stuInfo.setCreateTime(new Date());
mongoTemplate.save(stuInfo);
System.out.println("修改成功");
ドキュメントを保存するためのカスタム コレクション
StuInfo stuInfo =new StuInfo();
stuInfo.setId(2l);
stuInfo.setUserName("修改后的名称");
stuInfo.setPassWord("123123");
stuInfo.setCreateTime(new Date());
mongoTemplate.save(stuInfo,"stuInfo");
System.out.println("修改成功");
2.7. ドキュメントの更新
MongoTemplate には、ドキュメントを更新するための updateFirst() メソッドと updateMulti() メソッドが用意されています。サンプル コードは次のとおりです。
クエリされたドキュメント データの最初のデータと一致するようにドキュメントを更新します。
StuInfo stuInfo =new StuInfo();
stuInfo.setId(2l);
stuInfo.setUserName("修改Name");
stuInfo.setPassWord("222222");
stuInfo.setCreateTime(new Date());
//更新条件
Query query= new Query(Criteria.where("id").is(stuInfo.getId()));
//更新值
Update update= new Update().set("userName", stuInfo.getUserName()).set("passWord", stuInfo.getPassWord());
//更新查询满足条件的文档数据(第一条)
UpdateResult result =mongoTemplate.updateFirst(query,update, StuInfo.class);
if(result!=null){
System.out.println("更新条数:" + result.getMatchedCount());
}
クエリされたドキュメント データ内のすべてのデータと一致するようにドキュメントを更新します。
StuInfo stuInfo =new StuInfo();
stuInfo.setId(2l);
stuInfo.setUserName("修改Name");
stuInfo.setPassWord("222222");
stuInfo.setCreateTime(new Date());
//更新条件
Query query= new Query(Criteria.where("id").is(stuInfo.getId()));
//更新值
Update update= new Update().set("userName", stuInfo.getUserName()).set("passWord", stuInfo.getPassWord());
//更新查询满足条件的文档数据(第一条)
UpdateResult result =mongoTemplate.updateMulti(query,update, StuInfo.class);
if(result!=null){
System.out.println("更新条数:" + result.getMatchedCount());
}
2.8. 削除操作
MongoTemplate はドキュメントを削除するための Remove() を提供します。
条件に一致するすべての文書を削除し、削除された文書を返します。ここではコードを 1 つずつ貼り付けません。ヘルプ文書または検索エンジンを確認してください。
2.9. ドキュメントのクエリ
MongoTemplate は、日々の開発で使用されるドキュメント クエリ メソッド、findById() メソッドを提供します。サンプル コードは次のとおりです。
long id = 1l;
StuInfo result = mongoTemplate.findById(id, StuInfo.class);
System.out.println("查询结果:" + result.toString());
コレクション内のすべてのドキュメント データをクエリする
long id = 1l;
List<StuInfo> list = mongoTemplate.findAll(StuInfo.class);
System.out.println("查询总行:" + list.size());
クエリにはさまざまな方法があり、必要なときにヘルプ ドキュメントをクエリできます。
3.0、インデックス管理
すべてのデータベースにおいて、インデックスの一時的な場所は非常に重要です。たとえば、数百万のデータを含むデータ テーブルを取得する場合、インデックスがないとクエリ効率が非常に遅くなります。MongoDB についても同様です。
例は次のとおりです。
昇順インデックスを作成する
// 设置字段名称
String field = "userName";
// 创建索引
mongoTemplate.getCollection("stuInfo").createIndex(Indexes.ascending(field));
インデックスを削除する
// 设置字段名称
String field = "userName";
// 创建索引
mongoTemplate.getCollection("stuInfo").dropIndex(Indexes.ascending(field));
コレクション内のすべてのインデックスをクエリします
エンティティ クラスに注釈を付けることでインデックス @Indexed を作成することもできます。
3.1. MongoDB でのトランザクションの導入
単一ノードの mongodb はトランザクションをサポートしていないため、MongoDB レプリケーション セットを構築する必要があります。
3. まとめ
実際のビジネスシナリオでは、集計関数などの高度なクエリを使用する必要がある場合もあります。そのような必要がある場合は、次のアドレスにアクセスして、より詳細な API を入手できます。
Spring 公式ドキュメント https://docs.spring.io/spring-data/data-mongo/docs/1.10.12.RELEASE/api/
MongoDB 公式ドキュメント クエリ API https://www.mongodb.com/docs/drivers/java/
この記事では、データの追加、削除、変更、クエリを実現するための SpringBoot の MongoDB 統合の基本的な紹介を中心に説明します。間違った記述があれば、メッセージを残してご指摘ください。できるだけ早く関連する内容を修正します。私の内容が少しでもお役に立てましたら、高評価をお願いいたします。あなたの賞賛は私が前に進むための原動力です。