From 68c8aa2bb1dbdb3cef03ae938e3e80e50c4629f1 Mon Sep 17 00:00:00 2001 From: Avin Buricha Date: Sun, 5 Mar 2023 02:53:20 +0530 Subject: [PATCH] Article code (#13567) --- .../mongo/insert/InsertFieldIntoFilter.java | 74 +++++++++++++++++++ .../insert/InsertFieldIntoFilterLiveTest.java | 73 ++++++++++++++++++ .../src/test/resources/pet.json | 3 + 3 files changed, 150 insertions(+) create mode 100644 persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/insert/InsertFieldIntoFilter.java create mode 100644 persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/insert/InsertFieldIntoFilterLiveTest.java create mode 100644 persistence-modules/java-mongodb-3/src/test/resources/pet.json diff --git a/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/insert/InsertFieldIntoFilter.java b/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/insert/InsertFieldIntoFilter.java new file mode 100644 index 0000000000..aabc6aef18 --- /dev/null +++ b/persistence-modules/java-mongodb-3/src/main/java/com/baeldung/mongo/insert/InsertFieldIntoFilter.java @@ -0,0 +1,74 @@ +package com.baeldung.mongo.insert; + +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.BsonDocument; +import org.bson.Document; +import org.bson.conversions.Bson; + +import static com.mongodb.client.model.Filters.*; + +public class InsertFieldIntoFilter { + + 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 = "pet"; + + database = mongoClient.getDatabase(databaseName); + collection = database.getCollection(collectionName); + } + } + + public static void addFieldToExistingBsonFilter() { + + Bson existingFilter = and(eq("type", "Dog"), eq("gender", "Male")); + + Bson newFilter = and(existingFilter, gt("age", 5)); + FindIterable documents = collection.find(newFilter); + + MongoCursor cursor = documents.iterator(); + while (cursor.hasNext()) { + System.out.println(cursor.next()); + } + } + + + public static void addFieldToExistingBsonFilterUsingBsonDocument() { + + Bson existingFilter = eq("type", "Dog"); + BsonDocument existingBsonDocument = existingFilter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry()); + + Bson newFilter = gt("age", 5); + BsonDocument newBsonDocument = newFilter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry()); + + existingBsonDocument.append("age", newBsonDocument.get("age")); + + FindIterable documents = collection.find(existingBsonDocument); + + MongoCursor cursor = documents.iterator(); + while (cursor.hasNext()) { + System.out.println(cursor.next()); + } + } + + public static void main(String args[]) { + + setUp(); + + addFieldToExistingBsonFilter(); + + addFieldToExistingBsonFilterUsingBsonDocument(); + } +} diff --git a/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/insert/InsertFieldIntoFilterLiveTest.java b/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/insert/InsertFieldIntoFilterLiveTest.java new file mode 100644 index 0000000000..be4ed260d9 --- /dev/null +++ b/persistence-modules/java-mongodb-3/src/test/java/com/baeldung/mongo/insert/InsertFieldIntoFilterLiveTest.java @@ -0,0 +1,73 @@ +package com.baeldung.mongo.insert; + +import com.baeldung.mongo.find.FindOperationLiveTest; +import com.mongodb.MongoClient; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.MongoDatabase; +import org.bson.BsonDocument; +import org.bson.Document; +import org.bson.conversions.Bson; +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 InsertFieldIntoFilterLiveTest { + + private static MongoClient mongoClient; + private static MongoDatabase database; + private static MongoCollection collection; + private static final String DATASET_JSON = "/pet.json"; + + @BeforeClass + public static void setUp() throws IOException { + if (mongoClient == null) { + mongoClient = new MongoClient("localhost", 27017); + + database = mongoClient.getDatabase("baeldung"); + collection = database.getCollection("pet"); + + 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 givenPetCollection_whenFetchingAfterAddingFieldToFilter_thenFindMatchingDocuments() { + Bson existingFilter = and(eq("type", "Dog"), eq("gender", "Male")); + + Bson newFilter = and(existingFilter, gt("age", 5)); + MongoCursor cursor = collection.find(newFilter).iterator(); + + assertNotNull(cursor); + assertTrue(cursor.hasNext()); + } + + @Test + public void givenPetCollection_whenFetchingAfterAddingFieldToFilterUsingBsonDocument_thenFindMatchingDocuments() { + Bson existingFilter = eq("type", "Dog"); + BsonDocument existingBsonDocument = existingFilter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry()); + + Bson newFilter = gt("age", 5); + BsonDocument newBsonDocument = newFilter.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry()); + + existingBsonDocument.append("age", newBsonDocument.get("age")); + MongoCursor cursor = collection.find(existingBsonDocument).iterator(); + + assertNotNull(cursor); + assertTrue(cursor.hasNext()); + } +} diff --git a/persistence-modules/java-mongodb-3/src/test/resources/pet.json b/persistence-modules/java-mongodb-3/src/test/resources/pet.json new file mode 100644 index 0000000000..b31cf16718 --- /dev/null +++ b/persistence-modules/java-mongodb-3/src/test/resources/pet.json @@ -0,0 +1,3 @@ +{"petId":"P1","name":"Tom","age":3,"type":"Cat","gender":"Female"} +{"petId":"P2","name":"Max","age":4,"type":"Dog","gender":"Male"} +{"petId":"P3","name":"Milo","age":8,"type":"Dog","gender":"Male"} \ No newline at end of file