sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb mongoTemplate få et særskilt felt med nogle kriterier

For det første er .getCollection() metoden returnerer det grundlæggende Driver-indsamlingsobjekt som sådan:

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

Så typen af ​​forespørgselsobjekt kan være anderledes end det du bruger, men der er også nogle andre ting. Nemlig at .distinct() returnerer kun de "forskellige" værdier for den nøgle, du bad om, og returnerer ikke andre felter i dokumentet. Så du kunne gøre:

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());
 

Men det vil for eksempel kun returnere "sample" som et enkelt element i listen.

Hvis du vil have "felterne" fra et særskilt sæt, skal du bruge .aggregate() metode i stedet for. Med enten de "første" forekomster af de andre feltværdier for den distinkte nøgle:

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);

Eller de faktiske "adskilte" værdier for flere felter, ved at gøre dem alle til en del af grupperingsnøglen:

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);

Der er også en direkte .aggregate() metode på mongoTemplate-instanser allerede, som har en række hjælpemetoder til at bygge pipelines. Men dette burde i det mindste pege dig i den rigtige retning.



  1. Sharding med forårsmongo

  2. MongoDB Composite Key:InvalidOperationException:{document}.Identitet er ikke understøttet

  3. Er dette en god use-case for Redis på en ServiceStack REST API?

  4. MongoDB forespørger optimering