1. ホーム
  2. データベース
  3. モンゴルディーブ

MongoTemplateのidによるクエリがNULLの場合について

2022-01-20 20:51:47

Mongoのメリット

MongoDBはメモリ管理に干渉せず、OSの仮想メモリマネージャに任せるので、MongoDBの作業が簡略化されるというメリットがあります。これはMongoDBの作業を単純化するメリットがありますが、デメリットはMongoDBが占めるメモリの量を簡単に制御する方法がないことです。幸い、仮想メモリマネージャーが存在するので、ほとんどの場合、これを気にする必要はありません。

2. MongoDBのメモリ使用メカニズムにより、キャッシュの再構築が非常に優れている。要するに、プロセスを再起動しても、キャッシュは有効であるということだ

設定です。

spring.data.mongodb.uri=mongodb://test:123456@${ipAddr}:27017/mrqc?connectTimeoutMS=10000&authSource=admin

バージョン

<dependency>
 <groupId>org.springframework.data</groupId>
 <artifactId>spring-data-mongodb</artifactId>
 <version>2.2.0.RELEASE</version>
</dependency>

エラーエンティティのクラス

MongoId が String に設定されているので ObjectId 型に設定する必要があります。

@Data
@Document("user")
public class User {
 @MongoId
 private String id;
 @Field("userName")
 private String userName;
}

正しいエンティティクラス

@Data
@Document("user")
public class User {
 @MongoId
 private ObjectId id;
 @Field("userName")
 private String userName;
}

クエリ文は、mongoId の型が String の場合はクエリされず、直接
findByIdメソッドまたはfind(query)またはidはObjectIdオブジェクトを渡すと、見つかりません、最初は設定が間違っていると思った、結果はMongoのIDはObjectIdはString型のエンティティクラスに対応できないためです。ObjectIdに変更すると、同じステートメントをクエリすることができます。

User user = mongoTemplate.findById(new ObjectId(userId),User.class, "user");

以上、MongoTemplateのidによるNULLクエリについてでした。MongoTemplate の null クエリについては、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を参照してください。