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

個別の埋め込みドキュメントを検索し、フィールドを使用してさらに区別します

    MongoBD集計を使用して、目的の結果を得ることができます(外観 ):

    db.health.aggregate([
      {
        $sort: {
          "healths.effDate": 1
        }
      },
      {
        $group: {
          _id: "$healths.healthCd",
          healths: {
            $first: "$healths"
          }
        }
      },
      {
        $replaceRoot: {
          newRoot: "$healths"
        }
      }
    ])
    

    MongoPlayground

    スプリングブートの実装

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.data.domain.Sort.Direction;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.aggregation.Aggregation;
    import org.springframework.data.mongodb.core.aggregation.AggregationResults;
    
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    
    @SpringBootApplication
    public class DemoApplication implements CommandLineRunner {
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception {
    
    //      //If your operator is not available inside Aggregation or query is too complex, 
    //      //use below code to write MongoDB shell code directly as JSON
    //      new AggregationOperation() {
    //
    //          @Override
    //          public Document toDocument(AggregationOperationContext context) {
    //              return new Document("$group", 
    //                  new Document("_id", "$healths.healthCd")
    //                      .append("healths", new Document("$first", "$healths")));
    //          }
    //          
    //      },
    
            Aggregation agg = Aggregation.newAggregation(
                Aggregation.sort(Direction.ASC, "healths.effDate"),
                Aggregation.group("healths.healthCd").first("healths").as("healths"),           
                Aggregation.replaceRoot("healths")
            );
    
            AggregationResults<Healths> healths = mongoTemplate.aggregate(agg, 
                    mongoTemplate.getCollectionName(Health.class), Healths.class);
            for (Healths health : healths.getMappedResults()) {
                Gson gson = new GsonBuilder().setPrettyPrinting().create();
                System.out.println(gson.toJson(health));
            }
        }
    }
    



    1. MongoDB / NoSQL:ドキュメントの変更履歴を保持する

    2. GoLangを使用したmongodbでのトランザクションの例

    3. ゲーム用に選択するデータベース

    4. StackExchange.RedisとStackExchange.Redis.StrongNameの違いは何ですか?