MongoDB Java Driver
Create Maven project
sudo apt install maven -y
mvn archetype:generate -DgroupId=com.admatic -DartifactId=MongoDB -DarchetypeArtifactId=maven-archetype-quickstart
cd MongoDB
MongoDB Driver Sync
The MongoDB Driver mongodb-driver-sync is the synchronous Java driver containing only the generic MongoCollection interface that complies with a new cross-driver CRUD specification. It does not include the legacy API (e.g. DBCollection).
vim pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.admatic</groupId>
<artifactId>MongoDB</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>MongoDB</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<archive>
<manifest>
<mainClass>com.admatic.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<skipAssembly>false</skipAssembly>
</configuration>
<executions>
<execution>
<id>package</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
vim src/main/java/com/admatic/App.java
package com.admatic;
import com.mongodb.Block;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.BulkWriteOptions;
import com.mongodb.client.model.DeleteOneModel;
import com.mongodb.client.model.InsertOneModel;
import com.mongodb.client.model.ReplaceOneModel;
import com.mongodb.client.model.UpdateOneModel;
import com.mongodb.client.model.WriteModel;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
import static com.mongodb.client.model.Accumulators.sum;
import static com.mongodb.client.model.Aggregates.group;
import static com.mongodb.client.model.Aggregates.match;
import static com.mongodb.client.model.Aggregates.project;
import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.exists;
import static com.mongodb.client.model.Filters.gt;
import static com.mongodb.client.model.Filters.gte;
import static com.mongodb.client.model.Filters.lt;
import static com.mongodb.client.model.Filters.lte;
import static com.mongodb.client.model.Projections.excludeId;
import static com.mongodb.client.model.Sorts.descending;
import static com.mongodb.client.model.Updates.inc;
import static com.mongodb.client.model.Updates.set;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
public class App {
public static void main(final String[] args) {
MongoClient mongoClient = MongoClients.create();
// get handle to "mydb" database
MongoDatabase database = mongoClient.getDatabase("mydb");
// get a handle to the "test" collection
MongoCollection<Document> collection = database.getCollection("test");
// drop all the data in it
collection.drop();
// make a document and insert it
Document doc = new Document("name", "MongoDB")
.append("type", "database")
.append("count", 1)
.append("info", new Document("x", 203).append("y", 102));
collection.insertOne(doc);
// get it (since it's the only one in there since we dropped the rest earlier on)
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
// now, lets add lots of little documents to the collection so we can explore queries and cursors
List<Document> documents = new ArrayList<Document>();
for (int i = 0; i < 100; i++) {
documents.add(new Document("i", i));
}
collection.insertMany(documents);
System.out.println("total # of documents after inserting 100 small ones (should be 101) " + collection.count());
// find first
myDoc = collection.find().first();
System.out.println(myDoc.toJson());
// lets get all the documents in the collection and print them out
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
for (Document cur : collection.find()) {
System.out.println(cur.toJson());
}
// now use a query to get 1 document out
myDoc = collection.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());
// now use a range query to get a larger subset
cursor = collection.find(gt("i", 50)).iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
// range query with multiple constraints
cursor = collection.find(and(gt("i", 50), lte("i", 100))).iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
// Query Filters
myDoc = collection.find(eq("i", 71)).first();
System.out.println(myDoc.toJson());
// now use a range query to get a larger subset
Block<Document> printBlock = new Block<Document>() {
@Override
public void apply(final Document document) {
System.out.println(document.toJson());
}
};
collection.find(gt("i", 50)).forEach(printBlock);
// filter where; 50 < i <= 100
collection.find(and(gt("i", 50), lte("i", 100))).forEach(printBlock);
// Sorting
myDoc = collection.find(exists("i")).sort(descending("i")).first();
System.out.println(myDoc.toJson());
// Projection
myDoc = collection.find().projection(excludeId()).first();
System.out.println(myDoc.toJson());
// Aggregation
collection.aggregate(asList(
match(gt("i", 0)),
project(Document.parse("{ITimes10: {$multiply: ['$i', 10]}}")))
).forEach(printBlock);
myDoc = collection.aggregate(singletonList(group(null, sum("total", "$i")))).first();
System.out.println(myDoc.toJson());
// Update One
collection.updateOne(eq("i", 10), set("i", 110));
// Update Many
UpdateResult updateResult = collection.updateMany(lt("i", 100), inc("i", 100));
System.out.println(updateResult.getModifiedCount());
// Delete One
collection.deleteOne(eq("i", 110));
// Delete Many
DeleteResult deleteResult = collection.deleteMany(gte("i", 100));
System.out.println(deleteResult.getDeletedCount());
collection.drop();
// ordered bulk writes
List<WriteModel<Document>> writes = new ArrayList<WriteModel<Document>>();
writes.add(new InsertOneModel<Document>(new Document("_id", 4)));
writes.add(new InsertOneModel<Document>(new Document("_id", 5)));
writes.add(new InsertOneModel<Document>(new Document("_id", 6)));
writes.add(new UpdateOneModel<Document>(new Document("_id", 1), new Document("$set", new Document("x", 2))));
writes.add(new DeleteOneModel<Document>(new Document("_id", 2)));
writes.add(new ReplaceOneModel<Document>(new Document("_id", 3), new Document("_id", 3).append("x", 4)));
collection.bulkWrite(writes);
collection.drop();
collection.bulkWrite(writes, new BulkWriteOptions().ordered(false));
//collection.find().forEach(printBlock);
// Clean up
database.drop();
// release resources
mongoClient.close();
}
}
mvn compile
mvn exec:java -Dexec.mainClass="com.admatic.App"
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0aa" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : 203, "y" : 102 } }
total # of documents after inserting 100 small ones (should be 101) 101
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0aa" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : 203, "y" : 102 } }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0aa" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : 203, "y" : 102 } }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ab" }, "i" : 0 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ac" }, "i" : 1 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ad" }, "i" : 2 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ae" }, "i" : 3 }
...
...
...
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10c" }, "i" : 97 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10d" }, "i" : 98 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10e" }, "i" : 99 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0aa" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : 203, "y" : 102 } }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ab" }, "i" : 0 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ac" }, "i" : 1 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ad" }, "i" : 2 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ae" }, "i" : 3 }
...
...
...
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10d" }, "i" : 98 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10e" }, "i" : 99 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10e" }, "i" : 99 }
{ "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : 203, "y" : 102 } }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ac" }, "ITimes10" : 10 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ad" }, "ITimes10" : 20 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a0ae" }, "ITimes10" : 30 }
...
...
...
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10c" }, "ITimes10" : 970 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10d" }, "ITimes10" : 980 }
{ "_id" : { "$oid" : "5b0fa05fddc3bf389739a10e" }, "ITimes10" : 990 }
{ "_id" : null, "total" : 4950 }
99
99
May 31, 2018 7:12:32 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Closed connection [connectionId{localValue:2, serverValue:3}] to localhost:27017 because the pool has been closed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24.387 s
[INFO] Finished at: 2018-05-31T07:12:32+00:00
[INFO] Final Memory: 18M/191M
[INFO] ------------------------------------------------------------------------