diff --git a/persistence-modules/java-mongodb-3/pom.xml b/persistence-modules/java-mongodb-3/pom.xml
index d9b299b516..6fb8f07276 100644
--- a/persistence-modules/java-mongodb-3/pom.xml
+++ b/persistence-modules/java-mongodb-3/pom.xml
@@ -22,7 +22,7 @@
- 3.12.1
+ 3.12.11
\ No newline at end of file
diff --git a/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/filter/FilterOperation.java b/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/filter/FilterOperation.java
new file mode 100644
index 0000000000..d674d57878
--- /dev/null
+++ b/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/filter/FilterOperation.java
@@ -0,0 +1,134 @@
+package com.baeldung.mongo.filter;
+
+import com.mongodb.MongoClient;
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.MongoDatabase;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+
+import static com.mongodb.client.model.Filters.*;
+
+public class FilterOperation {
+
+ private static MongoClient mongoClient;
+ private static MongoDatabase database;
+ private static MongoCollection collection;
+ private static String collectionName;
+ private static String databaseName;
+
+ public static void setUp() {
+ if (mongoClient == null) {
+ mongoClient = new MongoClient("localhost", 27017);
+
+ databaseName = "baeldung";
+ collectionName = "user";
+
+ database = mongoClient.getDatabase(databaseName);
+ collection = database.getCollection(collectionName);
+ }
+ }
+
+ public static void equalsOperator() {
+ Bson filter = eq("userName", "Jack");
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void notEqualOperator() {
+ Bson filter = ne("userName", "Jack");
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void greaterThanOperator() {
+ Bson filter = gt("age", 25);
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void lessThanOperator() {
+ Bson filter = lt("age", 25);
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void inOperator() {
+ Bson filter = in("userName", "Jack", "Lisa");
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void notInOperator() {
+ Bson filter = nin("userName", "Jack", "Lisa");
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void andOperator() {
+ Bson filter = and(gt("age", 25), eq("role", "Admin"));
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void orOperator() {
+ Bson filter = or(gt("age", 30), eq("role", "Admin"));
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void existsOperator() {
+ Bson filter = exists("type");
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ public static void regexOperator() {
+ Bson filter = regex("userName", "a");
+ FindIterable documents = collection.find(filter);
+
+ printResult(documents);
+ }
+
+ private static void printResult(FindIterable documents) {
+ MongoCursor cursor = documents.iterator();
+ while (cursor.hasNext()) {
+ System.out.println(cursor.next());
+ }
+ }
+
+ public static void main(String args[]) {
+
+ setUp();
+
+ equalsOperator();
+
+ notEqualOperator();
+
+ greaterThanOperator();
+
+ lessThanOperator();
+
+ inOperator();
+
+ notInOperator();
+
+ andOperator();
+
+ orOperator();
+
+ existsOperator();
+
+ regexOperator();
+ }
+}
diff --git a/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/filter/FilterOperationLiveTest.java b/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/filter/FilterOperationLiveTest.java
new file mode 100644
index 0000000000..f2022764f1
--- /dev/null
+++ b/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/filter/FilterOperationLiveTest.java
@@ -0,0 +1,153 @@
+package com.baeldung.mongo.filter;
+
+import com.baeldung.mongo.find.FindOperationLiveTest;
+import com.mongodb.MongoClient;
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.MongoDatabase;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import static com.mongodb.client.model.Filters.*;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class FilterOperationLiveTest {
+
+ private static MongoClient mongoClient;
+ private static MongoDatabase database;
+ private static MongoCollection collection;
+ private static final String DATASET_JSON = "/user.json";
+
+ @BeforeClass
+ public static void setUp() throws IOException {
+ if (mongoClient == null) {
+ mongoClient = new MongoClient("localhost", 27017);
+
+ database = mongoClient.getDatabase("baeldung");
+ collection = database.getCollection("user");
+
+ collection.drop();
+
+ InputStream is = FindOperationLiveTest.class.getResourceAsStream(DATASET_JSON);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+ reader.lines()
+ .forEach(line -> collection.insertOne(Document.parse(line)));
+ reader.close();
+ }
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingEqualsOperator_thenFindMatchingDocuments() {
+ Bson filter = eq("userName", "Jack");
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingNotEqualOperator_thenFindMatchingDocuments() {
+ Bson filter = ne("userName", "Jack");
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingGreaterThanOperator_thenFindMatchingDocuments() {
+ Bson filter = gt("age", 25);
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingLessThanOperator_thenFindMatchingDocuments() {
+ Bson filter = lt("age", 25);
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingInOperator_thenFindMatchingDocuments() {
+ Bson filter = in("userName", "Jack", "Lisa");
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingNotInOperator_thenFindMatchingDocuments() {
+ Bson filter = nin("userName", "Jack", "Lisa");
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingAndOperator_thenFindMatchingDocuments() {
+ Bson filter = and(gt("age", 25), eq("role", "Admin"));
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingOrOperator_thenFindMatchingDocuments() {
+ Bson filter = or(gt("age", 30), eq("role", "Admin"));
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingExistsOperator_thenFindMatchingDocuments() {
+ Bson filter = exists("type");
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @Test
+ public void givenUserCollection_whenFetchingUsingRegexOperator_thenFindMatchingDocuments() {
+ Bson filter = regex("userName", "a");
+ FindIterable documents = collection.find(filter);
+ MongoCursor cursor = documents.iterator();
+
+ assertNotNull(cursor);
+ assertTrue(cursor.hasNext());
+ }
+
+ @AfterClass
+ public static void cleanUp() {
+ mongoClient.close();
+ }
+}
diff --git a/persistence-modules/java-mongodb-3/src/test/resources/user.json b/persistence-modules/java-mongodb-3/src/test/resources/user.json
new file mode 100644
index 0000000000..b9ae26a0ca
--- /dev/null
+++ b/persistence-modules/java-mongodb-3/src/test/resources/user.json
@@ -0,0 +1,3 @@
+{"userId":"123","userName":"Jack","age":23,"role":"Admin"}
+{"userId":"456","userName":"Lisa","age":27,"role":"Admin","type":"Web"}
+{"userId":"789","userName":"Tim","age":31,"role":"Analyst"}
\ No newline at end of file