Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
CRIO_BYTES
ME_MONGODB
Commits
f91a0902
Commit
f91a0902
authored
4 years ago
by
Nabhan Abdulla
Browse files
Options
Download
Email Patches
Plain Diff
Add solution
parent
665a1384
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
233 additions
and
8 deletions
+233
-8
build.gradle
build.gradle
+8
-1
src/main/java/project/App.java
src/main/java/project/App.java
+156
-6
src/main/java/project/ReservationDTO.java
src/main/java/project/ReservationDTO.java
+59
-0
src/main/resources/application.properties
src/main/resources/application.properties
+1
-1
src/main/resources/data.json
src/main/resources/data.json
+9
-0
No files found.
build.gradle
View file @
f91a0902
...
...
@@ -21,7 +21,14 @@ repositories {
}
dependencies
{
compile
'org.mongodb:mongo-java-driver:2.12.3'
// https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver
compile
group:
'org.mongodb'
,
name:
'mongo-java-driver'
,
version:
'3.12.7'
// https://mvnrepository.com/artifact/org.json/json
compile
group:
'org.json'
,
name:
'json'
,
version:
'20200518'
compile
group:
'com.fasterxml.jackson.core'
,
name:
'jackson-databind'
,
version:
'2.0.1'
compile
group:
'org.springframework.boot'
,
name:
'spring-boot-starter-data-mongodb'
,
version:
'2.2.4.RELEASE'
}
application
{
...
...
This diff is collapsed.
Click to expand it.
src/main/java/project/App.java
View file @
f91a0902
...
...
@@ -3,19 +3,169 @@
*/
package
project
;
import
java.net.UnknownHostException
;
import
java.util.Set
;
import
java.io.File
;
import
java.io.IOException
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.Date
;
import
java.util.Iterator
;
import
java.util.logging.Level
;
import
java.util.logging.Logger
;
import
com.mongodb.DB
;
import
com.mongodb.MongoClient
;
import
com.fasterxml.jackson.core.JsonParseException
;
import
com.fasterxml.jackson.databind.JsonMappingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.mongodb.client.MongoClient
;
import
com.mongodb.BasicDBObject
;
import
com.mongodb.DBCursor
;
import
com.mongodb.DBObject
;
// import com.mongodb.MongoClient;
import
com.mongodb.MongoClientSettings
;
import
com.mongodb.MongoClientURI
;
import
com.mongodb.bulk.UpdateRequest
;
import
com.mongodb.client.MongoClients
;
import
com.mongodb.client.MongoCollection
;
import
com.mongodb.client.MongoDatabase
;
import
com.mongodb.client.result.DeleteResult
;
import
com.mongodb.client.result.UpdateResult
;
// import com.mongodb.diagnostics.logging.Logger;
import
com.mongodb.diagnostics.logging.Loggers
;
import
java.time.Duration
;
import
java.time.LocalDate
;
import
org.bson.codecs.configuration.CodecRegistry
;
import
org.bson.codecs.pojo.PojoCodecProvider
;
import
static
org
.
bson
.
codecs
.
configuration
.
CodecRegistries
.
fromProviders
;
import
static
org
.
bson
.
codecs
.
configuration
.
CodecRegistries
.
fromRegistries
;
public
class
App
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"App running!"
);
public
static
void
main
(
String
[]
args
)
throws
JsonParseException
,
JsonMappingException
,
IOException
,
ParseException
{
System
.
out
.
println
(
"App running!"
);
// Add settings to support inserting POJO data
// http://mongodb.github.io/mongo-java-driver/3.7/driver/getting-started/quick-start-pojo/
CodecRegistry
pojoCodecRegistry
=
fromRegistries
(
MongoClientSettings
.
getDefaultCodecRegistry
(),
fromProviders
(
PojoCodecProvider
.
builder
().
automatic
(
true
).
build
()));
MongoClientSettings
settings
=
MongoClientSettings
.
builder
().
codecRegistry
(
pojoCodecRegistry
).
build
();
// Create a MongoDB connection
MongoClient
mongoClient
=
MongoClients
.
create
(
settings
);
// Create a MongoDB connection
// MongoClient mongoClient = new MongoClient(new
// MongoClientURI("mongodb://localhost:27017"));
// TODO: Create a new database - myTravels
// Database will be auto-created on adding data
MongoDatabase
database
=
mongoClient
.
getDatabase
(
"myTravels"
);
MongoCollection
<
ReservationDTO
>
collection
=
database
.
getCollection
(
"reservations"
,
ReservationDTO
.
class
);
// TODO: Insert data to reservations collection in the myTravels database
// use jackson to read json data stored in file
// each of the reservation will be an object of the ReservationDTO class
File
file
=
new
File
(
"src/main/resources/data.json"
);
ObjectMapper
objectMapper
=
new
ObjectMapper
();
ReservationDTO
[]
reservations
=
objectMapper
.
readValue
(
file
,
ReservationDTO
[].
class
);
for
(
ReservationDTO
reservation
:
reservations
)
{
// parse string as DBObject object
System
.
out
.
println
(
reservation
);
// insert data to the collection
collection
.
insertOne
(
reservation
);
}
// TODO: Read all the data stored in the collection
// Read all reservations as an Iterator and print each out
Iterator
<
ReservationDTO
>
cursorReadAll
=
collection
.
find
().
iterator
();
System
.
out
.
println
(
"\n\nPrinting all the reservations"
);
while
(
cursorReadAll
.
hasNext
())
{
ReservationDTO
reservationRead
=
cursorReadAll
.
next
();
System
.
out
.
println
(
reservationRead
);
}
// TODO: Read all reservations for New York city
// Create query to filter the reservations data
BasicDBObject
queryReadFilterByCity
=
new
BasicDBObject
();
queryReadFilterByCity
.
put
(
"city"
,
"New York"
);
Iterator
<
ReservationDTO
>
cursorReadByFilter
=
collection
.
find
(
queryReadFilterByCity
).
iterator
();
System
.
out
.
println
(
"\n\nPrinting all reservations for New York city"
);
while
(
cursorReadByFilter
.
hasNext
())
{
ReservationDTO
reservationRead
=
cursorReadByFilter
.
next
();
System
.
out
.
println
(
reservationRead
);
}
// TODO: Update all the reservations for Delhi to Bangalore
BasicDBObject
queryUpdateFilterByCity
=
new
BasicDBObject
();
queryUpdateFilterByCity
.
put
(
"city"
,
"Delhi"
);
BasicDBObject
updateObjectByCity
=
new
BasicDBObject
();
updateObjectByCity
.
put
(
"city"
,
"Bangalore"
);
BasicDBObject
setObjectByCity
=
new
BasicDBObject
();
setObjectByCity
.
put
(
"$set"
,
updateObjectByCity
);
// Iterator<ReservationDTO> cursorUpdateByFilter =
// collection.find(queryUpdateFilterByCity).iterator();
System
.
out
.
println
(
"\n\nUpdating all reservations for Delhi to Banagalore"
);
UpdateResult
updateResultFilterByCity
=
collection
.
updateMany
(
queryUpdateFilterByCity
,
setObjectByCity
);
System
.
out
.
println
(
updateResultFilterByCity
.
getModifiedCount
());
// while (cursorUpdateByFilter.hasNext()) {
// ReservationDTO reservationToUpdate = cursorUpdateByFilter.next();
// reservationToUpdate.setCity("Bangalore");
// }
// TODO: Increment stay by 1 day if total booked for more than or equal to 7
// days
Iterator
<
ReservationDTO
>
cursorIncrementStay
=
collection
.
find
().
iterator
();
System
.
out
.
println
(
"\n\nIncrementing stay for customers who reserved for >= 7 days"
);
int
count
=
0
;
while
(
cursorIncrementStay
.
hasNext
())
{
ReservationDTO
reservationIncrementStay
=
cursorIncrementStay
.
next
();
// parse date from String to Java date datatype
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd'T'HH:mm:ss"
);
LocalDateTime
starts_at
=
LocalDateTime
.
parse
(
reservationIncrementStay
.
getStarts_at
(),
dateTimeFormatter
);
LocalDateTime
ends_at
=
LocalDateTime
.
parse
(
reservationIncrementStay
.
getEnds_at
(),
dateTimeFormatter
);
long
numberOfDaysReserved
=
Duration
.
between
(
starts_at
,
ends_at
).
toDays
();
if
(
numberOfDaysReserved
>=
7
)
{
// create filter query for getting document with _id value
BasicDBObject
queryUpdateIncrementStay
=
new
BasicDBObject
();
queryUpdateIncrementStay
.
put
(
"_id"
,
reservationIncrementStay
.
getId
());
// create update query for updating the ends_at value
BasicDBObject
updateObjectIncrementStay
=
new
BasicDBObject
();
String
updatedEndsAt
=
ends_at
.
plusDays
(
1
).
toString
();
updateObjectIncrementStay
.
put
(
"ends_at"
,
updatedEndsAt
);
BasicDBObject
setObjectIncrementStay
=
new
BasicDBObject
();
setObjectIncrementStay
.
put
(
"$set"
,
updateObjectIncrementStay
);
// update the document by addingn an additional day to ends_at
UpdateResult
updateResultIncrementStay
=
collection
.
updateOne
(
queryUpdateIncrementStay
,
setObjectIncrementStay
);
count
+=
updateResultIncrementStay
.
getModifiedCount
();
}
}
System
.
out
.
println
(
count
);
// TODO: Delete all the reservations for New York city
BasicDBObject
queryDeleteByCity
=
new
BasicDBObject
();
queryDeleteByCity
.
put
(
"city"
,
"New York"
);
System
.
out
.
println
(
"\n\nDeleting all reservations for New York city"
);
DeleteResult
deleteResultFilterByCity
=
collection
.
deleteMany
(
queryDeleteByCity
);
System
.
out
.
println
(
deleteResultFilterByCity
.
getDeletedCount
());
}
}
This diff is collapsed.
Click to expand it.
src/main/java/project/ReservationDTO.java
0 → 100644
View file @
f91a0902
package
project
;
import
org.bson.types.ObjectId
;
public
class
ReservationDTO
{
private
ObjectId
id
;
private
String
reservation_id
;
private
String
city
;
private
String
starts_at
;
private
String
ends_at
;
public
String
getReservation_id
()
{
return
reservation_id
;
}
public
void
setReservation_id
(
String
reservation_id
)
{
this
.
reservation_id
=
reservation_id
;
}
public
String
getCity
()
{
return
city
;
}
public
void
setCity
(
String
city
)
{
this
.
city
=
city
;
}
public
String
getStarts_at
()
{
return
starts_at
;
}
public
void
setStarts_at
(
String
starts_at
)
{
this
.
starts_at
=
starts_at
;
}
public
String
getEnds_at
()
{
return
ends_at
;
}
public
void
setEnds_at
(
String
ends_at
)
{
this
.
ends_at
=
ends_at
;
}
public
ObjectId
getId
()
{
return
id
;
}
public
void
setId
(
final
ObjectId
id
)
{
this
.
id
=
id
;
}
@Override
public
String
toString
()
{
return
"ReservationDTO [_id="
+
id
+
", city="
+
city
+
", ends_at="
+
ends_at
+
", reservation_id="
+
reservation_id
+
", starts_at="
+
starts_at
+
"]"
;
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/main/resources/application.properties
View file @
f91a0902
server.port
:
8081
# Mongo
# spring.data.mongodb.uri=mongodb://localhost:27017/reservations?authSource=admin
#
spring.data.mongodb.uri
=
mongodb://localhost:27017/reservations?authSource=admin
\ No newline at end of file
This diff is collapsed.
Click to expand it.
src/main/resources/data.json
0 → 100644
View file @
f91a0902
[
{
"reservation_id"
:
"106453A1D"
,
"city"
:
"New York"
,
"starts_at"
:
"2019-06-04T20:13:58"
,
"ends_at"
:
"2019-06-18T20:13:58"
},
{
"reservation_id"
:
"3492A55CE"
,
"city"
:
"New York"
,
"starts_at"
:
"2019-06-02T20:13:58"
,
"ends_at"
:
"2019-06-03T20:13:58"
},
{
"reservation_id"
:
"2DA771871"
,
"city"
:
"Delhi"
,
"starts_at"
:
"2019-06-01T20:13:58"
,
"ends_at"
:
"2019-06-06T20:13:58"
},
{
"reservation_id"
:
"1DA771871"
,
"city"
:
"Mumbai"
,
"starts_at"
:
"2020-06-04T20:13:58"
,
"ends_at"
:
"2020-06-16T20:13:58"
}
]
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment