sql >> データベース >  >> NoSQL >> MongoDB

Springデータmongodbアプリケーションの設計とデータ集約

    Spring Data Mongoに必要なAggregationOperationがない場合は常に($addFieldsを再現するため) 、$redact ...)、回避策(迅速で汚い解決策と言う人もいます)は、com.mongodb.clientツールを直接使用して生の集計をSpringに渡すことです:

    String collectionName = mongoTemplate.getCollectionName(Payment.class);
    MongoCollection<Document> collection = mongoClient.getDatabase(mongoTemplate.getDb().getName()).getCollection(collectionName);
    
    AggregateIterable<Document> ai = collection.aggregate(Arrays.asList(
        Document.parse(/* { "group" : { ... } } */)))
    

    MongoCollection.aggregate()は、集約パイプラインにList<Document>として渡されます。 (実際、List<? extends Bson> Document.parse()を使用して上記で提案した生の形式で、もちろんnew Document()を使用することもできます 適切なOOPコードのように見せるため。生の集計が複雑な場合や、ネストされたドキュメントのネストされたコンポーネントの数が多すぎる場合は、生のフォームを使用する傾向がありますが、それは好みの問題です。

    2020年の更新。

    この回避策 を使用してください 代わりは。これにより、Springが提供するAggregationOperationと独自の「生の」集約ステージの両方を同じ場所で簡単に使用できます。




    1. PythonとRedis:マネージャー/ワーカーアプリケーションのベストプラクティス

    2. 集計での動的値の使用

    3. PHPドライバーを使用したMongoDB集計クエリ

    4. インデックスを使用しても結果セットが大きい場合、mongodb.countDocumentsは遅くなります