/** * Creates a filter that matches all documents where the value of a field equals any value in the list of specified values. * * @param fieldName the field name * @param values the list of values * @param <TItem> the value type * @return the filter * @mongodb.driver.manual reference/operator/query/in $in */ public static <TItem> Bson in(final String fieldName, final TItem... values) { return in(fieldName, asList(values)); }
@Override public Function<String, Bson> visitIn(final List<?> values) { return fieldName -> Filters.in(fieldName, values); }
/** * Creates a filter that matches all documents where the value of a field equals any value in the list of specified values. * * @param fieldName the field name * @param values the list of values * @param <TItem> the value type * @return the filter * @mongodb.driver.manual reference/operator/query/in $in */ public static <TItem> Bson in(final String fieldName, final TItem... values) { return in(fieldName, asList(values)); }
/** * Add the conditions to the list. * * @param conditions the list of conditions. * @param fieldName the name of field. * @param values the values. */ private void addCondition(List<Bson> conditions, String fieldName, List<String> values) { if (values != null && !values.isEmpty()) { conditions.add(in(fieldName, values)); } }
@Override public void deleteAll(Collection<String> keys) { this.collection.deleteMany(in("_id", keys)); } }
@Override public List<State> readStates(List<String> ids) { return findAll(Filters.in(idKey, ids)); }
@Override public void deleteStates(Set<String> ids) { Bson filter = Filters.in(idKey, ids); if (log.isTraceEnabled()) { log.trace("MongoDB: REMOVE " + ids); } DeleteResult w = coll.deleteMany(filter); if (w.getDeletedCount() != ids.size()) { if (log.isDebugEnabled()) { log.debug("Removed " + w.getDeletedCount() + " docs for " + ids.size() + " ids: " + ids); } } }
@Override public <T> BsonFilterExpression visit(InFilter<T> filter, MongoResolutionContext<?> context) { return resolveOperationQueryFilter(context, filter, (c, fn) -> Filters.in(fn, resolveRightOperandAsIterable(filter, context))); }
@Override public Bson filter() { return Filters.and( between(), Filters.in("call_id", callIds) ); }
@Override public Map<String, Supplement> loadAll(Collection keys) { System.out.println("LoadAll " + keys); HashMap<String, Supplement> result = new HashMap<String, Supplement>(); FindIterable<Document> id = collection.find(in("_id", keys)); for (Document document : id) { String name = (String) document.get("name"); Integer price = document.getInteger("price"); result.put(document.get("_id").toString(), new Supplement(name, price)); } return result; }
@Override public Single<List<Group>> findByIdIn(List<String> ids) { return Observable.fromPublisher(groupsCollection.find(in(FIELD_ID, ids))).map(this::convert).collect(ArrayList::new, List::add); }
@Override public Single<List<User>> findByIdIn(List<String> ids) { return Observable.fromPublisher(usersCollection.find(in(FIELD_ID, ids))).map(this::convert).collect(ArrayList::new, List::add); }
private Bson computationalFilter(String user, String exploratoryName, String computationalStatus, String computationalImage, UserInstanceStatus[] excludedStatuses) { final String[] statuses = Arrays.stream(excludedStatuses) .map(UserInstanceStatus::toString) .toArray(String[]::new); return and(exploratoryCondition(user, exploratoryName), elemMatch(COMPUTATIONAL_RESOURCES, and(eq(IMAGE, computationalImage), not(in(STATUS, statuses)), not(eq(STATUS, computationalStatus))))); }
protected <T extends EdgeInfo> Optional<T> getEdgeInfoWhereStatusIn(String user, Class<T> target, UserInstanceStatus... statuses) { return findOne(USER_EDGE, and(eq(ID, user), in(EDGE_STATUS, statusList(statuses))), target); }
public boolean edgeNodeExist(String user) { return findOne(USER_EDGE, and(eq(ID, user), not(in(EDGE_STATUS, UserInstanceStatus.TERMINATING.toString(), UserInstanceStatus.TERMINATED.toString())))) .isPresent(); }
@Override public List<JobInfo> findLatestJobsDistinct() { final List<String> allJobIds = findAllJobIdsDistinct(); return collection() .find(Filters.in(ID, allJobIds)) .maxTime(mongoProperties.getDefaultReadTimeout(), TimeUnit.MILLISECONDS) .map(this::decode) .into(new ArrayList<>()); }
@Override public List<JobInfo> findLatestJobsDistinct() { final List<String> allJobIds = findAllJobIdsDistinct(); return collection() .find(in(ID, allJobIds)) .maxTime(mongoProperties.getDefaultReadTimeout(), TimeUnit.MILLISECONDS) .map(this::decode) .into(new ArrayList<>()); }
@Test public void testPullWithInPattern() { collection.insertOne(json("_id: 1, tags: ['aa', 'bb', 'ab', 'cc']")); collection.updateOne(json("_id: 1"), pullByFilter(in("tags", Pattern.compile("a+")))); assertThat(collection.find().first()).isEqualTo(json("_id: 1, tags: ['bb', 'cc']")); }
@Test public void testPullWithInPatternAnchored() { collection.insertOne(json("_id: 1, tags: ['aa', 'bb', 'ab', 'cc']")); collection.updateOne(json("_id: 1"), pullByFilter(in("tags", Pattern.compile("^a+$")))); assertThat(collection.find().first()).isEqualTo(json("_id: 1, tags: ['bb', 'ab', 'cc']")); }
@Test public void testPullWithInNumbers() { collection.insertOne(json("_id: 1, values: [1, 2, 2.5, 3.0, 4]")); collection.updateOne(json("_id: 1"), pullByFilter(in("values", Arrays.asList(2.0, 3, 4L)))); assertThat(collection.find().first()).isEqualTo(json("_id: 1, values: [1, 2.5]")); }