כל מה שאתה צריך לדעת על לקוח MongoDB



מאמר זה יספק לכם ידע מפורט ומקיף על לקוח MongoDB עם כל התכונות והשימושים בו.

אם היית סוג כלשהו של מערכת ניהול מסדי נתונים יחסיים מזה זמן מה, כנראה שנתקלת בשם . הוצג לראשונה בשנת 2009, כיום mongoDb היא אחת ממערכות ניהול מסדי הנתונים היחסיים הפופולריות ביותר בתעשייה. הסיבה העיקרית שעומדת מאחורי הפופולריות המטורפת שלה למרות נוכחותם של מנהלי תוכנות יחסיים ישנים כמו MySql הקיימת בשוק היא מספר רב של רבדים ורב צדדיות שהיא מביאה לשולחן. השימוש ב- MongoDB מבטל צרכים רבים, אחד מהם הוא הצורך ליצור מסד נתונים והגדרת סוג הנתונים בכל פעם שמתחילים פרויקט חדש. סדר היום של מאמר הלקוח MongoDB:





אך כדי להשיג את הפונקציונליות המקסימלית מתוך MongoDB, צריך להכיר את לקוח MongoDB ובמאמר זה, נדון בדיוק בזה.

תנאים מוקדמים עבור לקוח MongoDB

על מנת שמאמר זה יהיה מלא, יהיה עליכם לעמוד תחילה בתנאים המוקדמים הבאים.



יש כבר IDE במערכת שלך.
ערכת פיתוח Java או JDK גרסה 1.8 ומעלה המותקנת עם JAVA_HOME מוגדרת כהלכה.
Docker או MongoDB מותקן.
Apache Maven גרסה 3.5.3 ומעלה.

האדריכלות שיצרנו והשתמשנו במדריך זה היא מהפשוטות ביותר. כאשר הוא מבוצע המשתמש יכול להוסיף בקלות נתונים ואלמנטים ברשימה, ולאחר מכן הוא יתעדכן אוטומטית במסד הנתונים.

לוגו לקוח MongoDB



לצד זאת, וידאנו שכל התקשורת בין הנתונים לשרת היא ב- JSON וכל הנתונים מאוחסנים ב- MongoDB.

מתחילים

על מנת להתחיל בפרויקט זה, בצע את השלבים המפורטים להלן.

שלב 1: יצירת הפרויקט ב- Maven

השלב הראשון הוא תמיד ליצור פרויקט חדש וכדי לעשות זאת, השתמש בקוד הבא.

mvn io.quarkus: quarkus-maven-plugin: 0.22.0: create -DprojectGroupId = org.acme -DprojectArtifactId = using-mongodb-client -DclassName = 'org.acme.rest.json.FruitResource' -Dpath = '/ fruits '-הרחבות =' resteasy-jsonb, mongodb-client '

כאשר אתה מריץ את הפקודה שלמעלה, IDE ייבא את מערכת JSON-B, MongoDb וכן RESTEasy / JAX-RS למערכת שלך.

ממשיכים עם שלב 2.

שלב 2: הוספת שירות המנוחה הראשון שלך ב- JSON

על מנת לעשות זאת, השתמש בקוד שלמטה. חבילה org.acme.rest.json יבוא java.util.Objects ציבור ציבורי פרי {פרטי שם מחרוזת פרטי תיאור מחרוזת ציבורי פרי () {} פרי ציבורי (שם מחרוזת, תיאור מחרוזת) {this.name = שם this.description = תיאור } ציבורי מחרוזת getName () {להחזיר שם} set public name ריק (שם מחרוזת) {this.name = name} ציבורי מחרוזת getDescription () {תיאור החזרה} set public void set תיאור (תיאור מחרוזת) {this.description = תיאור} @ העבר לציבור בוליאני שווה (Object object) {if (! (obj instance of Fruit)) {return false} Fruit other = (Fruit) obj return Objects.equals (other.name, this.name)} @Override public int hashCode () {return Objects.hash (this.name)}}

בדוגמה לעיל, יצרנו לראשונה את הפרי אשר ישמש מאוחר יותר בתוכנית.

בשלב הבא עלינו ליצור את קובץ org.acme.rest.json.FruitService אשר יהיה שכבת המשתמש של היישום שלנו. על מנת לעשות זאת, השתמש בקוד שלמטה.

הגדרת ליקוי חמה עבור
חבילה org.acme.rest.json יבוא com.mongodb.client.MongoClient יבוא com.mongodb.client.MongoCollection ייבוא ​​com.mongodb.client.MongoCursor יבוא org.bson.Document ייבוא ​​javax.enterprise.context.ApplicationScoped ייבוא ​​javax.inject .הזריק ייבא java.util.ArrayList ייבא java.util.List @ApplicationScoped מחלקה ציבורית FruitService {@Inject MongoClient mongoClient רשימת רשימות () {List list = new ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () ) נסה {while (cursor.hasNext ()) {Document document = cursor.next () פרי פרי = פרי חדש () fruit.setName (document.getString ('שם')) fruit.setDescription (document.getString ('תיאור ')) list.add (fruit)}} לבסוף {cursor.close ()} return list} public void add (Fruit fruit) {Document document = new Document () .append (' name ', fruit.getName ()) .append ('תיאור', fruit.getDescription ()) getCollection (). insertOne (מסמך)} MongoCollection פרטי getCollection () {להחזיר mongoClient.getDatabase ('פרי'). getCol lection ('fruit')}} כעת עלינו לערוך את המחלקה org.acme.rest.json.FruitResource כך שתתאים לצרכים שלנו. על מנת לעשות זאת, השתמש בקוד שלמטה. @Path ('/ fruits') @Produces (MediaType.APPLICATION_JSON) @Consumes (MediaType.APPLICATION_JSON) מחלקה ציבורית FruitResource {@Inject FruitService fruitService @GET רשימת רשימות ציבורית () {return fruitService.list ()} @POST רשימת הציבור הוסף (פרי פירות) {fruitService.add (פרי) רשימת החזרה ()}}

ממשיכים עם שלב 3.

שלב 3: קביעת תצורה של מסד הנתונים mongoDb

התחביר כמו גם הקוד הסטנדרטי להגדרת תצורת מסד הנתונים של MongoDb הם כמפורט להלן.

# הגדר את לקוח mongoDB עבור קבוצת העתקים של שני צמתים quarkus.mongodb.connection-string = mongodb: // mongo1: 27017, mongo2: 27017

במקרה שלנו, נשתמש בקוד הבא כדי להגדיר את מסד הנתונים.

# הגדר את לקוח mongoDB עבור קבוצת העתקים של שני צמתים quarkus.mongodb.connection-string = mongodb: // localhost: 27017

ממשיכים עם שלב 4.

שלב 4: הפעלת מסד הנתונים המוגדר של MongoDB

השלב הבא הוא להריץ את מסד הנתונים של MongoDB שיצרנו זה עתה. על מנת לעשות זאת, השתמש בקוד שלמטה.

docker run -ti --rm -p 27017: 27017 mongo: 4.0

ממשיכים עם שלב 5.

שלב 5: ביצוע הקצה הקדמי

עכשיו, כשכל העבודה בחלק האחורי של היישום נעשית, הבה נבחן את הקוד המשמש לקידוד חזית היישום שלנו.

חבילה org.acme.rest.json יבוא io.quarkus.mongodb.ReactiveMongoClient ייבוא ​​io.quarkus.mongodb.ReactiveMongoCollection ייבוא ​​org.bson.Document ייבוא ​​javax.enterprise.context.ApplicationScoped ייבוא ​​javax.inject.Inject הזרקת יבוא java.util.List ייבא java.util.concurrent.CompletionStage @ApplicationScoped מחלקה ציבורית ReactiveFruitService {@Inject ReactiveMongoClient mongoClient public CompletionStage list () {return getCollection (). find (). map (doc -> {Fruit Fruit = Fruit New) () fruit.setName () doc.getString ('שם')) fruit.setDescription (doc.getString ('תיאור')) פירות להחזיר}). toList (). run ()} הוספה ציבורית Publication Stadium (פרי פירות) {מסמך מסמך = מסמך חדש () .append ('שם', fruit.getName ()). append ('תיאור', fruit.getDescription ()) החזרה getCollection (). insertOne (מסמך)} פרטי ReactiveMongoCollection getCollection () {return mongoClient.getDatabase ('פרי' ) .getCollection ('פרי')}} חבילה org.acme.rest.json יבוא javax.inject.Inject יבוא javax.ws.rs. * אני mport javax.ws.rs.core.MediaType ייבא java.util.List ייבא java.util.concurrent.CompletionStage @Path ('/ reactive_fruits') @Produces (MediaType.APPLICATION_JSON) @Consumes (MediaType.APPLICATION_JSON) סוג ציבורי ReactiveFruit @Inject ReactiveFruitService fruitService @ GET רשימת השלמות פומביות () {return fruitService.list ()} @POST public CompletionStage add (פרי פירות) {fruitService.add (פרי) רשימת החזרה ()}}

בדוגמה שלעיל אנו משתמשים לקוח mongoDb תגובתי כדי להקל על היווצרות הקצה הקדמי.

ממשיכים עם שלב 6.

שלב 6: פישוט לקוח mongoDb באמצעות codec BSON

על מנת לעשות זאת, השתמש בקוד שלמטה.

חבילה org.acme.rest.json.codec יבוא com.mongodb.MongoClient ייבוא ​​org.acme.rest.json.Fruit יבוא org.bson. * יבוא org.bson.codecs.Codec יבוא org.bson.codecs.CollectibleCodec ייבוא ​​org ייבוא ​​.bson.codecs.DecoderContext ייבוא ​​org.bson.codecs.EncoderContext ייבא java.util.UUID מחלקה ציבורית FruitCodec מיישם CollectibleCodec {private final Codec documentCodec ציבוריות FruitCodec () {this.documentCodec = MongoClient.getDefaultCodecRegistry (). )} @ לקודד חלל ציבורי @ (כותב BsonWriter, פרי פירות, EncoderContext encoderContext) {Document doc = מסמך חדש () doc.put ('שם', fruit.getName ()) doc.put ('תיאור', fruit.getDescription ()) documentCodec.encode (כותב, doc, encoderContext)} @ Override public Class getEncoderClass () {return Fruit.class} @ Override public Fruit genererenIdIfAbsentFromDocument (מסמך פרי) {if (! documentHasId (document)) {document.setId ( UUID.randomUUID (). ToString ())} החזרת מסמך} @Override public boolean documentHasId ( מסמך פירות) {return document.getId ()! = Null} @ Public Public BsonValue getDocumentId (Fruit document) {return BsonString new (document.getId ())} @ Override public decoder Fruit (BsonReader reader, DecoderContext decoderContext) {Document document = documentCodec.decode (reader, decoderContext) פרי פירות = פרי חדש () אם (document.getString ('id')! = null) {fruit.setId (document.getString ('id'))} fruit.setName (document .getString ('שם')) fruit.setDescription (document.getString ('תיאור')) פירות להחזיר}}

כעת נשתמש ב- CodecProvider לקישור זה למחלקת הפירות שכבר קיימת.

חבילה org.acme.rest.json.codec יבוא org.acme.rest.json.Fruit יבוא org.bson.codecs.Codec ייבוא ​​org.bson.codecs.configuration.CodecProvider יבוא org.bson.codecs.configuration.CodecRegistry מחלקה ציבורית FruitCodecProvider מיישם את CodecProvider {@Override Codec public get (Class clazz, CodecRegistry registry) {if (clazz == Fruit.class) {return (Codec) FruitCodec חדש ()} להחזיר null}}

ממשיכים עם שלב 7.

שלב 7: קוד סופי

הקוד הסופי ליישום זה ייראה בערך כך.

חבילה org.acme.rest.json יבוא com.mongodb.client.MongoClient ייבוא ​​com.mongodb.client.MongoCollection ייבוא ​​com.mongodb.client.MongoCursor יבוא javax.enterprise.context.ApplicationScoped ייבוא ​​javax.inject. הזרקת ייבוא ​​java.util ייבוא ​​ArrayList java.util.List @ApplicationScoped מחלקה ציבורית CodecFruitService {@Inject MongoClient mongoClient רשימת רשימות ציבוריות () {List list = new ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () try {while (cursor) .hasNext ()) {list.add (cursor.next ())}} לבסוף {cursor.close ()} רשימת החזרה} הוסף חלל ציבורי (פרי פירות) {getCollection (). insertOne (פרי)} MongoCollection פרטי getCollection ( ) {return mongoClient.getDatabase ('fruit'). getCollection ('fruit', Fruit.class)}}

סיכום

עכשיו אתה יודע כיצד להגדיר ולהשתמש בלקוח MongoDB במערכת שלך. קדימה, נסה את הקודים האלה במערכת שלך והודיע ​​לנו על החוויה שלך.

סיכום מאמרים

למד הכל על לקוח MongoDB וכיצד תוכל להגדיר אותו במערכת שלך לשימושים שונים. המשך לקרוא כדי לדעת יותר.

מחרוזת עד כה להמיר בג'אווה

עם זה, אנו מגיעים לסוף ה- ' לקוח MongoDB ' מאמר.