Skip to content

Commit f1bbcec

Browse files
authored
BAEL-5368 Guide to Find in MongoDB (eugenp#12361)
* BAEL-5368 | Article code * BAEL-5368 | Package renamed
1 parent 089f28e commit f1bbcec

File tree

7 files changed

+230
-0
lines changed

7 files changed

+230
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.classpath
2+
.project
3+
.settings
4+
target
5+
build
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<artifactId>java-mongodb-3</artifactId>
7+
<version>1.0-SNAPSHOT</version>
8+
<name>java-mongodb-3</name>
9+
10+
<parent>
11+
<groupId>com.baeldung</groupId>
12+
<artifactId>persistence-modules</artifactId>
13+
<version>1.0.0-SNAPSHOT</version>
14+
</parent>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>org.mongodb</groupId>
19+
<artifactId>mongo-java-driver</artifactId>
20+
<version>${mongo.version}</version>
21+
</dependency>
22+
</dependencies>
23+
24+
<properties>
25+
<mongo.version>3.12.1</mongo.version>
26+
</properties>
27+
28+
</project>
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.baeldung.mongo.find;
2+
3+
import com.mongodb.MongoClient;
4+
import com.mongodb.client.FindIterable;
5+
import com.mongodb.client.MongoCollection;
6+
import com.mongodb.client.MongoCursor;
7+
import com.mongodb.client.MongoDatabase;
8+
import org.bson.Document;
9+
import org.bson.conversions.Bson;
10+
11+
import static com.mongodb.client.model.Filters.eq;
12+
import static com.mongodb.client.model.Projections.fields;
13+
import static com.mongodb.client.model.Projections.include;
14+
15+
public class FindOperation {
16+
17+
private static MongoClient mongoClient;
18+
private static MongoDatabase database;
19+
private static MongoCollection<Document> collection;
20+
private static String collectionName;
21+
private static String databaseName;
22+
23+
public static void setUp() {
24+
if (mongoClient == null) {
25+
mongoClient = new MongoClient("localhost", 27017);
26+
27+
databaseName = "baeldung";
28+
collectionName = "employee";
29+
30+
database = mongoClient.getDatabase(databaseName);
31+
collection = database.getCollection(collectionName);
32+
}
33+
}
34+
35+
public static void retrieveAllDocumentsUsingFind() {
36+
FindIterable<Document> documents = collection.find();
37+
38+
MongoCursor<Document> cursor = documents.iterator();
39+
while (cursor.hasNext()) {
40+
System.out.println(cursor.next());
41+
}
42+
}
43+
44+
public static void retrieveAllDocumentsUsingFindWithQueryFilter() {
45+
Bson filter = eq("department", "Engineering");
46+
FindIterable<Document> documents = collection.find(filter);
47+
48+
MongoCursor<Document> cursor = documents.iterator();
49+
while (cursor.hasNext()) {
50+
System.out.println(cursor.next());
51+
}
52+
}
53+
54+
public static void retrieveAllDocumentsUsingFindWithQueryFilterAndProjection() {
55+
Bson filter = eq("department", "Engineering");
56+
Bson projection = fields(include("name", "age"));
57+
FindIterable<Document> documents = collection.find(filter)
58+
.projection(projection);
59+
60+
MongoCursor<Document> cursor = documents.iterator();
61+
while (cursor.hasNext()) {
62+
System.out.println(cursor.next());
63+
}
64+
}
65+
66+
public static void retrieveFirstDocument() {
67+
FindIterable<Document> documents = collection.find();
68+
Document document = documents.first();
69+
70+
System.out.println(document);
71+
}
72+
73+
public static void main(String args[]) {
74+
75+
setUp();
76+
77+
retrieveAllDocumentsUsingFind();
78+
79+
retrieveAllDocumentsUsingFindWithQueryFilter();
80+
81+
retrieveAllDocumentsUsingFindWithQueryFilterAndProjection();
82+
83+
retrieveFirstDocument();
84+
}
85+
}
86+
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<configuration>
3+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
4+
<encoder>
5+
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
6+
</pattern>
7+
</encoder>
8+
</appender>
9+
10+
<root level="INFO">
11+
<appender-ref ref="STDOUT" />
12+
</root>
13+
</configuration>
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.baeldung.mongo.find;
2+
3+
import com.mongodb.MongoClient;
4+
import com.mongodb.client.FindIterable;
5+
import com.mongodb.client.MongoCollection;
6+
import com.mongodb.client.MongoCursor;
7+
import com.mongodb.client.MongoDatabase;
8+
import org.bson.Document;
9+
import org.bson.conversions.Bson;
10+
import org.junit.AfterClass;
11+
import org.junit.BeforeClass;
12+
import org.junit.Test;
13+
14+
import java.io.BufferedReader;
15+
import java.io.IOException;
16+
import java.io.InputStream;
17+
import java.io.InputStreamReader;
18+
19+
import static com.mongodb.client.model.Filters.eq;
20+
import static com.mongodb.client.model.Projections.fields;
21+
import static com.mongodb.client.model.Projections.include;
22+
import static org.junit.Assert.*;
23+
24+
public class FindOperationLiveTest {
25+
26+
private static MongoClient mongoClient;
27+
private static MongoDatabase database;
28+
private static MongoCollection<Document> collection;
29+
private static final String DATASET_JSON = "/employee.json";
30+
31+
@BeforeClass
32+
public static void setUp() throws IOException {
33+
if (mongoClient == null) {
34+
mongoClient = new MongoClient("localhost", 27017);
35+
36+
database = mongoClient.getDatabase("baeldung");
37+
collection = database.getCollection("employee");
38+
39+
collection.drop();
40+
41+
InputStream is = FindOperationLiveTest.class.getResourceAsStream(DATASET_JSON);
42+
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
43+
reader.lines()
44+
.forEach(line -> collection.insertOne(Document.parse(line)));
45+
reader.close();
46+
}
47+
}
48+
49+
@Test
50+
public void givenEmployeeCollection_whenFetchingUsingFindOperations_thenCheckingForDocuments() {
51+
FindIterable<Document> documents = collection.find();
52+
MongoCursor<Document> cursor = documents.iterator();
53+
54+
assertNotNull(cursor);
55+
assertTrue(cursor.hasNext());
56+
}
57+
58+
@Test
59+
public void givenEmployeeCollection_whenFetchingUsingFindOperationsWithFilters_thenCheckingForDocuments() {
60+
Bson filter = eq("department", "Engineering");
61+
FindIterable<Document> documents = collection.find(filter);
62+
MongoCursor<Document> cursor = documents.iterator();
63+
64+
assertNotNull(cursor);
65+
assertTrue(cursor.hasNext());
66+
}
67+
68+
@Test
69+
public void givenEmployeeCollection_whenFetchingUsingFindOperationsWithFiltersAndProjection_thenCheckingForDocuments() {
70+
Bson filter = eq("department", "Engineering");
71+
Bson projection = fields(include("name", "age"));
72+
FindIterable<Document> documents = collection.find(filter)
73+
.projection(projection);
74+
MongoCursor<Document> cursor = documents.iterator();
75+
76+
assertNotNull(cursor);
77+
assertTrue(cursor.hasNext());
78+
}
79+
80+
@Test
81+
public void givenEmployeeCollection_whenFetchingFirstDocumentUsingFindOperations_thenCheckingForDocument() {
82+
Document employee = collection.find()
83+
.first();
84+
85+
assertNotNull(employee);
86+
assertFalse(employee.isEmpty());
87+
}
88+
89+
@AfterClass
90+
public static void cleanUp() {
91+
mongoClient.close();
92+
}
93+
}
94+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{"employeeId":"EMP1","name":"Sam","age":23,"type":"Full Time","department":"Engineering"}
2+
{"employeeId":"EMP2","name":"Tony","age":31,"type":"Full Time","department":"Admin"}
3+
{"employeeId":"EMP3","name":"Lisa","age":42,"type":"Part Time","department":"Engineering"}

persistence-modules/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
<module>java-jpa-3</module>
4545
<module>java-mongodb</module> <!-- long running -->
4646
<module>java-mongodb-2</module> <!-- long running -->
47+
<module>java-mongodb-3</module> <!-- long running -->
4748
<module>jnosql</module> <!-- long running -->
4849
<module>jooq</module>
4950
<module>jpa-hibernate-cascade-type</module>

0 commit comments

Comments
 (0)