MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

mongodb mongoTemplate कुछ मानदंडों के साथ अलग क्षेत्र प्राप्त करें

एक बात के लिए .getCollection() विधि मूल ड्राइवर संग्रह वस्तु को इस प्रकार लौटाती है:

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

तो क्वेरी ऑब्जेक्ट का प्रकार आप जो उपयोग कर रहे हैं उससे भिन्न हो सकता है, लेकिन कुछ अन्य चीजें भी हैं। यानी कि .distinct() केवल आपके द्वारा मांगी गई कुंजी के "अलग" मान लौटाता है, और दस्तावेज़ के अन्य क्षेत्रों को वापस नहीं करता है। तो आप यह कर सकते हैं:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. पासवर्ड के लिए नेवला कस्टम सत्यापन

  2. MongoDb:.gz फ़ाइल से डंप डेटा कैसे आयात करें?

  3. MongoDB $asinh

  4. आपके अनुप्रयोगों के लिए पारदर्शी डेटाबेस विफलता

  5. मोंगोडब - अशक्त क्षेत्रों को पुनरावर्ती रूप से हटा दें?