5

Spring Data MongoDB を使用しています。しかし、結果をドメイン クラスにマップしたくありません。また、低レベルの MongoAB API にアクセスしたい場合もあります。しかし、春に接続プーリングなどを管理したい.

com.mongodb.MongoClientのインスタンスを取得して低レベルの操作を実行するにはどうすればよいですか。これが私がやろうとしていることです:

MongoClient mongoClient = new MongoClient();
DB local = mongoClient.getDB("local");
DBCollection oplog = local.getCollection("oplog.$main");
DBCursor lastCursor = oplog.find().sort(new BasicDBObject("$natural", -1)).limit(1);

または、単純に JSON オブジェクト / DBCursor / DBObject が必要です。

4

2 に答える 2

3

MongoTemplate通常は、ネイティブ Mongo ドライバー API へのアクセスを提供するコールバックを受け取るのexecute(…)メソッドを介して低レベルのアクセスを実行します。

 class MyClient {

   private final MongoOperations operations;

   @Autowired
   public MyClient(MongoOperations mongoOperations) {
     this.operations = operations;
   }

   void yourMethod() {

     operations.execute(new CollectionCallback<YourDomainClass>() {
       YourDomainClass doInCollection(DBCollection collection) {
         // here goes your low-level code
       }
     });
   }

このテンプレート アプローチの利点はMongoTemplate、インターフェイスをサポートするインスタンスMongoOperationsがすべてのリソース管理と例外変換 (すべての Mongo 固有の例外を Spring のDataAccessException階層に変換する) を処理することです。

ただし、具体的な例では、先に進んで次のことを直接実行できます。

 Query query = new Query().with(new Sort(DESC, "$natural")).limit(1);
 DBObject result = operations.find(query, DBObject.class, "oplog.$main");

ここでは、メソッドに渡す型を組み合わせて一致させ、必要に応じてテンプレートが結果をまたはドメイン オブジェクトfind(…)に変換できるようにします。Map上記のように、上記のサンプル コードにないリソース管理と例外変換も取得します。

于 2013-09-19T15:16:06.510 に答える
3

あなたはこのようにすることができます

@Autowired MongoDbFactory factory;
DB local = factory.getDB("local");
DBCollection oplog = local.getCollection("oplog.$main");
DBCursor lastCursor = oplog.find().sort(new BasicDBObject("$natural", -1)).limit(1);

どこ

MongoDbFactory is an interface provifed by spring-data-mongo that can obtain a        
com.mongodb.DB object and access allthe functionality of a specific MongoDB database   
instance

構成ファイルには次の情報が含まれている必要があります。

<bean id="mongoFactoryBean"
class="org.springframework.data.mongodb.core.MongoFactoryBean">
    <property name="host" value="127.0.0.1"/>
    <property name="port" value="27017"/>
</bean>

<bean id="mongoDbFactory" 
class="org.springframework.data.mongodb.core.SimpleMongoDbFactory">
    <constructor-arg name="mongo" ref="mongoFactoryBean"/>
    <constructor-arg name="databaseName" value="local"/>
</bean>

そのようにすると、春は接続プールを管理し続けるはずです。

于 2013-09-10T14:17:36.240 に答える