public QueryResult<Document> aggregate(List<? extends Bson> operations, QueryOptions options) { return aggregate(operations, null, options); }
@Override public QueryResult nativeGet(Query query, QueryOptions options) { List<Bson> aggregateList = unwindAndMatchTranscripts(query, options); return mongoDBCollection.aggregate(aggregateList, options); }
@Override public QueryResult nativeGet(Query query, QueryOptions options) { List<Bson> aggregateList = unwindAndMatchTranscripts(query, options); return mongoDBCollection.aggregate(aggregateList, options); }
QueryResult queryResult = mongoDBCollection2.aggregate(pipeline, options);
QueryResult queryResult = mongoDBCollection2.aggregate(pipeline, options);
aggregation.add(new Document("$sort", new Document("_id.name", -1).append("count", -1))); List<Document> result = getCollection().aggregate(aggregation, new QueryOptions()).getResult();
private long getDiskUsageByStudy(int studyId) { List<Bson> operations = new ArrayList<>(); operations.add(Aggregates.match(Filters.eq(PRIVATE_STUDY_ID, studyId))); operations.add(Aggregates.group("$" + PRIVATE_STUDY_ID, Accumulators.sum("size", "$diskUsage"))); QueryResult<Document> aggregate = dbAdaptorFactory.getCatalogFileDBAdaptor().getCollection() .aggregate(operations, null); if (aggregate.getNumResults() == 1) { Object size = aggregate.getResult().get(0).get("size"); if (size instanceof Integer) { return ((Integer) size).longValue(); } else if (size instanceof Long) { return ((Long) size); } else { return Long.parseLong(size.toString()); } } else { return 0; } }
protected QueryResult groupBy(Bson query, String groupByField, String featureIdField, QueryOptions options) { if (groupByField == null || groupByField.isEmpty()) { return new QueryResult(); } if (groupByField.contains(",")) { // call to multiple groupBy if commas are present return groupBy(query, Arrays.asList(groupByField.split(",")), featureIdField, options); } else { Bson match = Aggregates.match(query); Bson project = Aggregates.project(Projections.include(groupByField, featureIdField)); Bson group; if (options.getBoolean("count", false)) { group = Aggregates.group("$" + groupByField, Accumulators.sum("count", 1)); return mongoDBCollection.aggregate(Arrays.asList(match, project, group), options); } else { // Limit the documents passed if count is false Bson limit = Aggregates.limit(options.getInt("limit", 10)); group = Aggregates.group("$" + groupByField, Accumulators.addToSet("features", "$" + featureIdField)); // TODO change the default "_id" returned by mongodb to id return mongoDBCollection.aggregate(Arrays.asList(match, limit, project, group), options); } } }
protected QueryResult groupBy(Bson query, String groupByField, String featureIdField, QueryOptions options) { if (groupByField == null || groupByField.isEmpty()) { return new QueryResult(); } if (groupByField.contains(",")) { // call to multiple groupBy if commas are present return groupBy(query, Arrays.asList(groupByField.split(",")), featureIdField, options); } else { Bson match = Aggregates.match(query); Bson project = Aggregates.project(Projections.include(groupByField, featureIdField)); Bson group; if (options.getBoolean("count", false)) { group = Aggregates.group("$" + groupByField, Accumulators.sum("count", 1)); return mongoDBCollection.aggregate(Arrays.asList(match, project, group), options); } else { // Limit the documents passed if count is false Bson limit = Aggregates.limit(options.getInt("limit", 10)); group = Aggregates.group("$" + groupByField, Accumulators.addToSet("features", "$" + featureIdField)); // TODO change the default "_id" returned by mongodb to id return mongoDBCollection.aggregate(Arrays.asList(match, limit, project, group), options); } } }
if (options.getBoolean("count", false)) { group = Aggregates.group(id, Accumulators.sum("count", 1)); return mongoDBCollection.aggregate(Arrays.asList(match, project, group), options); } else { group = Aggregates.group(id, Accumulators.addToSet("features", "$" + featureIdField)); return mongoDBCollection.aggregate(Arrays.asList(match, limit, project, group), options);
@Override public QueryResult<Group> getGroup(long studyId, @Nullable String groupId, List<String> userIds) throws CatalogDBException { long startTime = startQuery(); checkId(studyId); if (userIds == null) { userIds = Collections.emptyList(); } List<Bson> aggregation = new ArrayList<>(); aggregation.add(Aggregates.match(Filters.eq(PRIVATE_UID, studyId))); aggregation.add(Aggregates.project(Projections.include(QueryParams.GROUPS.key()))); aggregation.add(Aggregates.unwind("$" + QueryParams.GROUPS.key())); if (userIds.size() > 0) { aggregation.add(Aggregates.match(Filters.in(QueryParams.GROUP_USER_IDS.key(), userIds))); } if (groupId != null && groupId.length() > 0) { aggregation.add(Aggregates.match(Filters.eq(QueryParams.GROUP_NAME.key(), groupId))); } QueryResult<Document> queryResult = studyCollection.aggregate(aggregation, null); List<Study> studies = MongoDBUtils.parseStudies(queryResult); List<Group> groups = new ArrayList<>(); studies.stream().filter(study -> study.getGroups() != null).forEach(study -> groups.addAll(study.getGroups())); return endQuery("getGroup", startTime, groups); }
@Override public Long variableSetExists(long variableSetId) { List<Bson> aggregation = new ArrayList<>(); aggregation.add(Aggregates.match(Filters.elemMatch(QueryParams.VARIABLE_SET.key(), Filters.eq(VariableSetParams.UID.key(), variableSetId)))); aggregation.add(Aggregates.project(Projections.include(QueryParams.VARIABLE_SET.key()))); aggregation.add(Aggregates.unwind("$" + QueryParams.VARIABLE_SET.key())); aggregation.add(Aggregates.match(Filters.eq(QueryParams.VARIABLE_SET_UID.key(), variableSetId))); QueryResult<VariableSet> queryResult = studyCollection.aggregate(aggregation, variableSetConverter, new QueryOptions()); return (long) queryResult.getResult().size(); }
protected QueryResult rank(MongoDBCollection collection, Bson query, List<String> groupByField, String idField, int numResults, boolean asc) { if (groupByField == null || groupByField.isEmpty()) { return new QueryResult(); } if (groupByField.size() == 1) { // if only one field then we call to simple rank return rank(collection, query, groupByField.get(0), idField, numResults, asc); } else { Bson match = Aggregates.match(query); // add all group-by fields to the projection together with the aggregation field name List<String> groupByFields = new ArrayList<>(groupByField); groupByFields.add(idField); Bson project = Aggregates.project(Projections.include(groupByFields)); // _id document creation to have the multiple id Document id = new Document(); for (String s : groupByField) { id.append(s, "$" + s); } Bson group = Aggregates.group(id, Accumulators.sum("count", 1)); Bson sort; if (asc) { sort = Aggregates.sort(Sorts.ascending("count")); } else { sort = Aggregates.sort(Sorts.descending("count")); } Bson limit = Aggregates.limit(numResults); return collection.aggregate(Arrays.asList(match, project, group, sort, limit), new QueryOptions()); } }
group = Aggregates.group(id, Accumulators.addToSet("items", "$" + idField)); return collection.aggregate(Arrays.asList(match, project, group), options);
protected QueryResult rank(MongoDBCollection collection, Bson query, String groupByField, String idField, int numResults, boolean asc) { if (groupByField == null || groupByField.isEmpty()) { return new QueryResult(); } if (groupByField.contains(",")) { // call to multiple rank if commas are present return rank(collection, query, Arrays.asList(groupByField.split(",")), idField, numResults, asc); } else { Bson match = Aggregates.match(query); Bson project = Aggregates.project(Projections.include(groupByField, idField)); Bson group = Aggregates.group("$" + groupByField, Accumulators.sum("count", 1)); Bson sort; if (asc) { sort = Aggregates.sort(Sorts.ascending("count")); } else { sort = Aggregates.sort(Sorts.descending("count")); } Bson limit = Aggregates.limit(numResults); return collection.aggregate(Arrays.asList(match, project, group, sort, limit), new QueryOptions()); } }
@Override public QueryResult nativeGet(Query query, QueryOptions options) { Bson bson = parseQuery(query); Bson match = Aggregates.match(bson); Bson project = Aggregates.project(Projections.include("transcripts.xrefs")); Bson unwind = Aggregates.unwind("$transcripts"); Bson unwind2 = Aggregates.unwind("$transcripts.xrefs"); // This project the three fields of Xref to the top of the object Document document = new Document("id", "$transcripts.xrefs.id"); document.put("dbName", "$transcripts.xrefs.dbName"); document.put("dbDisplayName", "$transcripts.xrefs.dbDisplayName"); Bson project1 = Aggregates.project(document); if (query.containsKey(QueryParams.DBNAME.key())) { Bson bson2 = parseQuery(new Query(QueryParams.DBNAME.key(), query.get(QueryParams.DBNAME.key()))); Bson match2 = Aggregates.match(bson2); return mongoDBCollection.aggregate(Arrays.asList(match, project, unwind, unwind2, match2, project1), options); } return mongoDBCollection.aggregate(Arrays.asList(match, project, unwind, unwind2, project1), options); }
@Override public QueryResult nativeGet(Query query, QueryOptions options) { Bson bson = parseQuery(query); Bson match = Aggregates.match(bson); Bson project = Aggregates.project(Projections.include("transcripts.xrefs")); Bson unwind = Aggregates.unwind("$transcripts"); Bson unwind2 = Aggregates.unwind("$transcripts.xrefs"); // This project the three fields of Xref to the top of the object Document document = new Document("id", "$transcripts.xrefs.id"); document.put("dbName", "$transcripts.xrefs.dbName"); document.put("dbDisplayName", "$transcripts.xrefs.dbDisplayName"); Bson project1 = Aggregates.project(document); if (query.containsKey(QueryParams.DBNAME.key())) { Bson bson2 = parseQuery(new Query(QueryParams.DBNAME.key(), query.get(QueryParams.DBNAME.key()))); Bson match2 = Aggregates.match(bson2); return mongoDBCollection.aggregate(Arrays.asList(match, project, unwind, unwind2, match2, project1), options); } return mongoDBCollection.aggregate(Arrays.asList(match, project, unwind, unwind2, project1), options); }
@Override public QueryResult<Long> count(Query query) { Bson document = parseQuery(query); Bson match = Aggregates.match(document); List<String> includeFields = new ArrayList<>(); for (String s : query.keySet()) { if (StringUtils.isNotEmpty(query.getString(s))) { includeFields.add(s); } } Bson include; if (includeFields.size() > 0) { include = Aggregates.project(Projections.include(includeFields)); } else { include = Aggregates.project(Projections.include("transcripts.id")); } Bson unwind = Aggregates.unwind("$transcripts"); Bson match2 = Aggregates.match(document); Bson project = Aggregates.project(new Document("transcripts", "$transcripts.id")); Bson group = Aggregates.group("transcripts", Accumulators.sum("count", 1)); QueryResult<Document> queryResult = mongoDBCollection.aggregate(Arrays.asList(match, include, unwind, match2, project, group), null); Number number = (Number) queryResult.first().get("count"); Long count = number.longValue(); return new QueryResult<>(null, queryResult.getDbTime(), queryResult.getNumResults(), queryResult.getNumTotalResults(), queryResult.getWarningMsg(), queryResult.getErrorMsg(), Collections.singletonList(count)); }
@Override public QueryResult<Long> count(Query query) { Bson document = parseQuery(query); Bson match = Aggregates.match(document); List<String> includeFields = new ArrayList<>(); for (String s : query.keySet()) { if (StringUtils.isNotEmpty(query.getString(s))) { includeFields.add(s); } } Bson include; if (includeFields.size() > 0) { include = Aggregates.project(Projections.include(includeFields)); } else { include = Aggregates.project(Projections.include("transcripts.id")); } Bson unwind = Aggregates.unwind("$transcripts"); Bson match2 = Aggregates.match(document); Bson project = Aggregates.project(new Document("transcripts", "$transcripts.id")); Bson group = Aggregates.group("transcripts", Accumulators.sum("count", 1)); QueryResult<Document> queryResult = mongoDBCollection.aggregate(Arrays.asList(match, include, unwind, match2, project, group), null); Number number = (Number) queryResult.first().get("count"); Long count = number.longValue(); return new QueryResult<>(null, queryResult.getDbTime(), queryResult.getNumResults(), queryResult.getNumTotalResults(), queryResult.getWarningMsg(), queryResult.getErrorMsg(), Collections.singletonList(count)); }
Bson project = Aggregates.project(document); return mongoDBCollection.aggregate(Arrays.asList(match, includeAndExclude, unwind, unwind2, project), queryOptions);