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

mongodb mongoTemplateは、いくつかの基準で個別のフィールドを取得します

    一つには、.getCollection() メソッドは、次のように基本的なDriverコレクションオブジェクトを返します。

    DBCollection collection = mongoTemplate.getCollection("collectionName");
    

    したがって、クエリオブジェクトのタイプは、使用しているものとは異なる場合がありますが、他にもいくつかあります。つまり、その.distinct() 要求したキーの「distint」値のみを返し、ドキュメントの他のフィールドは返しません。だからあなたはできる:

    Criteria criteria = new Criteria();
    criteria.where("dataset").is("d1");
    Query query = new Query();
    query.addCriteria(criteria);
    List list = mongoTemplate.getCollection("collectionName")
        .distinct("source",query.getQueryObject());
    

    ただし、これは、たとえばリスト内の単一の要素として「サンプル」を返すだけです。

    個別のセットの「フィールド」が必要な場合は、.aggregate()を使用します 代わりにメソッド。個別のキーの他のフィールド値が「最初に」出現した場合:

        DBCollection colllection = mongoTemplate.getCollection("collectionName");
    
        List<DBObject> pipeline = Arrays.<DBObject>asList(
            new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
            new BasicDBObject("$group",
                new BasicDBObject("_id","$source")
                    .append("name",new BasicDBObject("$first","$name"))
                    .append("description", new BasicDBObject("$first","$description"))
            )
        );
    
        AggregationOutput output = colllection.aggregate(pipeline);
    

    または、複数のフィールドの実際の「個別の」値をすべてグループ化キーの一部にすることにより、次のようになります。

        DBCollection colllection = mongoTemplate.getCollection("collectionName");
    
        List<DBObject> pipeline = Arrays.<DBObject>asList(
            new BasicDBObject("$match",new BasicDBObject("dataset","d1")),
            new BasicDBObject("$group",
                new BasicDBObject("_id",
                    new BasicDBObject("source","$source")
                        .append("name","$name")
                        .append("description","$description")
                )
            )
        );
    
        AggregationOutput output = colllection.aggregate(pipeline);
    

    直接の.aggregate()もあります すでにmongoTemplateインスタンスのメソッドであり、パイプラインを構築するための多数のヘルパーメソッドがあります。しかし、これは少なくともあなたを正しい方向に向けるはずです。



    1. UNIXミリ秒時間を使用したMongogroupby月

    2. mongoDBの2つの配列フィールドをマージします

    3. JavaScriptを介してMongoDBに直接アクセスする

    4. mongoengineを使用してGridFではなくDEFAULT_FILE_STORAGEにファイルをアップロードします