נחקור היום את הזרקת הנתונים הגורמלית של MongoDB. ניתן להזין מספר מסמכים בו זמנית ב-MongoDB באמצעות פעולת הזרקה הגורמלית, שבה מועבר מערך של מסמכים כפרמטר לשיטת ההזרקה.
הזרקת נתונים גורמלית של MongoDB
הזרקת נתונים גורמלית של MongoDB מבצעת הזרקה מסודרת כברירת מחדל. אם אירעה טעות במהלך ההזרקה בנקודה מסוימת, ההזרקה אינה מתרחשת למסמכים הנותרים. בואו נראה דוגמה כיצד להזין מסמכים מרובים באמצעות הזרקת נתונים גורמלית של MongoDB דרך שורת פקודה.
הזרקת מסמכים רבים של MongoDB
> db.car.insert(
... [
... { _id:1,name:"Audi",color:"Red",cno:"H101",mfdcountry:"Germany",speed:75 },
... { _id:2,name:"Swift",color:"Black",cno:"H102",mfdcountry:"Italy",speed:60 },
... { _id:3,name:"Maruthi800",color:"Blue",cno:"H103",mfdcountry:"India",speed:70 },
... { _id:4,name:"Polo",color:"White",cno:"H104",mfdcountry:"Japan",speed:65 },
... { _id:5,name:"Volkswagen",color:"JetBlue",cno:"H105",mfdcountry:"Rome",speed:80 }
... ]
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 5,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
הפעולה הזו הכניסה חמישה מסמכים. MongoDB יוצרת שדה id אוטומטית אם לא צוין על ידי המשתמש בשאילתה. עמודה "nInserted" מודיעה למשתמש על מספר המסמכים שהוזנו. כדי לראות את המסמכים שהוזנו, בצע את השאילתה הבאה כפי שמוצג למטה.
> db.car.find()
{ "_id" : 1, "name" : "Audi", "color" : "Red", "cno" : "H101", "mfdcountry" : "Germany", "speed" : 75 }
{ "_id" : 2, "name" : "Swift", "color" : "Black", "cno" : "H102", "mfdcountry" : "Italy", "speed" : 60 }
{ "_id" : 3, "name" : "Maruthi800", "color" : "Blue", "cno" : "H103", "mfdcountry" : "India", "speed" : 70 }
{ "_id" : 4, "name" : "Polo", "color" : "White", "cno" : "H104", "mfdcountry" : "Japan", "speed" : 65 }
{ "_id" : 5, "name" : "Volkswagen", "color" : "JetBlue", "cno" : "H105", "mfdcountry" : "Rome", "speed" : 80 }
>
קרא עוד על פעולות חיפוש ב-MongoDB והזרקת MongoDB. במהלך ההזרקה, אין חובה על המשתמש לספק את כל השדות בשאילתה. כעת בואו נראה כיצד ההזרקה פועלת כאשר חלק מהשדות לא צוינו.
הכנסת Bulk של מסמכים ב-MongoDB והגדרת חלק מהשדות
> db.car.insert(
... [
... { _id:6,name:"HondaCity",color:"Grey",cno:"H106",mfdcountry:"Sweden",speed:45 },
... {name:"Santro",color:"Pale Blue",cno:"H107",mfdcountry:"Denmark",speed:55 },
... { _id:8,name:"Zen",speed:54 }
... ]
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
בדוגמה זו, למסמך השני, שדה ה-id לא מוגדר על ידי המשתמש ולמסמך השלישי סופקו רק שדות id, name ו-speed בשאילתה. השאילתה מבצעת הכנסה מוצלחת גם על אף ועדיין יש שדות חסרים במסמכים השני והשלישי. בעמודת nInserted נאמר שהוכנסו שלושה מסמכים. הפעילו את שיטת ה-find ובדקו את המסמכים שהוכנסו.
> db.car.find()
{ "_id" : 1, "name" : "Audi", "color" : "Red", "cno" : "H101", "mfdcountry" : "Germany", "speed" : 75 }
{ "_id" : 2, "name" : "Swift", "color" : "Black", "cno" : "H102", "mfdcountry" : "Italy", "speed" : 60 }
{ "_id" : 3, "name" : "Maruthi800", "color" : "Blue", "cno" : "H103", "mfdcountry" : "India", "speed" : 70 }
{ "_id" : 4, "name" : "Polo", "color" : "White", "cno" : "H104", "mfdcountry" : "Japan", "speed" : 65 }
{ "_id" : 5, "name" : "Volkswagen", "color" : "JetBlue", "cno" : "H105", "mfdcountry" : "Rome", "speed" : 80 }
{ "_id" : 6, "name" : "HondaCity", "color" : "Grey", "cno" : "H106", "mfdcountry" : "Sweden", "speed" : 45 }
{ "_id" : ObjectId("54885b8e61307aec89441a0b"), "name" : "Santro", "color" : "Pale Blue", "cno" : "H107", "mfdcountry" : "Denmark", "speed" : 55 }
{ "_id" : 8, "name" : "Zen", "speed" : 54 }
>
שימו לב שה-id נוצר באופן אוטומטי על ידי MongoDB עבור הרכב "Santro". עבור id 8 – הוכנסו רק שדות name ו-speed.
הכנסת מסמכים לא מסודרים
במהלך ההכנסה לא מסודרת, אם יש שגיאה בנקודה מסוימת, מסד הנתונים של MongoDB ממשיך להכניס את המסמכים הנותרים במערך. לדוגמה;
> db.car.insert(
... [
... { _id:9,name:"SwiftDezire",color:"Maroon",cno:"H108",mfdcountry:"New York",speed:40 },
... { name:"Punto",color:"Wine Red",cno:"H109",mfdcountry:"Paris",speed:45 },
... ],
... { ordered: false }
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
הפרמטר ordered מוגדר כ-"false" בשאילתת ה-insert, מציין שמדובר באוסף לא מסודר. בצעו db.car.find()
{ "_id" : 1, "name" : "Audi", "color" : "Red", "cno" : "H101", "mfdcountry" : "Germany", "speed" : 75 }
{ "_id" : 2, "name" : "Swift", "color" : "Black", "cno" : "H102", "mfdcountry" : "Italy", "speed" : 60 }
{ "_id" : 3, "name" : "Maruthi800", "color" : "Blue", "cno" : "H103", "mfdcountry" : "India", "speed" : 70 }
{ "_id" : 4, "name" : "Polo", "color" : "White", "cno" : "H104", "mfdcountry" : "Japan", "speed" : 65 }
{ "_id" : 5, "name" : "Volkswagen", "color" : "JetBlue", "cno" : "H105", "mfdcountry" : "Rome", "speed" : 80 }
{ "_id" : 6, "name" : "HondaCity", "color" : "Grey", "cno" : "H106", "mfdcountry" : "Sweden", "speed" : 45 }
{ "_id" : ObjectId("54746407d785e3a05a1808a6"), "name" : "Santro", "color" : "Pale Blue", "cno" : "H107", "mfdcountry" : "Denmark", "speed" : 55 }
{ "_id" : 8, "name" : "Zen", "speed" : 54 }
{ "_id" : 9, "name" : "SwiftDezire", "color" : "Maroon", "cno" : "H108", "mfdcountry" : "New York", "speed" : 40 }
{ "_id" : ObjectId("5474642dd785e3a05a1808a7"), "name" : "Punto", "color" : "Wine Red", "cno" : "H109", "mfdcountry" : "Paris", "speed" : 45 }
המסמכים מוכנסים וכפי שניתן לראות, זו הכנסה לא מסודרת. אם שיטת ההכנסה נתקלת בשגיאה, התוצאה כוללת את שדה "WriteResult.writeErrors" המציין את הודעת השגיאה שגרמה לכישלון.
הוספת ערך מזהה כפול
> db.car.insert({_id:6,name:"Innova"})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: journaldev.car.$_id_ dup key: { : 6.0 }"
}
})
>
השגיאה מציינת שאנו מכניסים מסמך עבור זיהוי 6 שכבר מכיל מסמך, ולכן משדרת שגיאת מפתח כפול עבור ערך מזהה 6.
שיטת Bulk.insert() ב-MongoDB
שיטה זו מבצעת פעולת הוספה בכמויות גדולות. היא הוצגה מגרסה 2.6 והלאה. התחביר הוא Bulk.insert(<מסמך>)
. מסמך: מציין את המסמך שיש להכניס. עכשיו נראה דוגמה להכנסה בכמות גדולה.
הכנסה לרשימה בסדר לא סדור
> var carbulk = db.car.initializeUnorderedBulkOp();
> carbulk.insert({ name:"Ritz", color:"Grey",cno:"H109",mfdcountry:"Mexico",speed:62});
> carbulk.insert({ name:"Versa", color:"Magenta",cno:"H110",mfdcountry:"France",speed:68});
> carbulk.insert({ name:"Innova", color:"JetRed",cno:"H111",mfdcountry:"Dubai",speed:72});
> carbulk.execute();
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
>
נוצרת רשימה לא סדורה בשם carbulk ושאילתת הכנסה מצויינת עם השדות והערכים שיש להכניס. שים לב שחשוב לקרוא לשיטת execute() לאחר מחרוזת הכנסה האחרונה כדי לוודא שהנתונים מוכנסים למסד הנתונים בפועל.
הוספת הכנסה רבת ערך של MongoDB בסדר
זה דומה להכנסה רבת ערך לא מסודרת אבל אנו משתמשים בקריאה ל־initializeOrderedBulkOp
.
>var car1bulk = db.car.initializeOrderedBulkOp();
>car1bulk.insert({ name:"Ertiga", color:"Red",cno:"H112",mfdcountry:"America",speed:65});
>car1bulk.insert({ name:"Quanta", color:"Maroon",cno:"H113",mfdcountry:"Rome",speed:78});
>car1bulk.execute();
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
ראשית אנו יוצרים רשימה מסודרת של אוסף רכב בשם carbulk1 ואז מכניסים את המסמכים על ידי קריאה לשיטת execute().
תוכנית Java להכנסה רבת ערך של MongoDB
בואו נצפה בתוכנית Java עבור פעולות רבות שונות, שראינו עד כה באמצעות פקודות shell. להלן התוכנית ב־Java עבור הכנסה רבת ערך באמצעות מנהל ה־Java של MongoDB גרסה 2.x.
package com.journaldev.mongodb;
import com.mongodb.BasicDBObject;
import com.mongodb.BulkWriteOperation;
import com.mongodb.BulkWriteResult;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
public class MongoDBBulkInsert {
//שיטה שמכניסה את כל המסמכים
public static void insertmultipledocs() throws UnknownHostException{
//מקבלת חיבור חדש למסד הנתונים בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
////משתמשת ב־test כמסד נתונים, השתמשו במסד הנתונים שלכם כאן
DB db=mongoClient.getDB("test");
////משיגה את אובייקט האוסף, משתמשת ב־car כאן, השתמשו בשלכם
DBCollection coll = db.getCollection("car");
//יוצרת אובייקט חדש
DBObject d1 = new BasicDBObject();
//נתונים עבור אובייקט d1
d1.put("_id", 11);
d1.put("name","WagonR");
d1.put("color", "MetallicSilver");
d1.put("cno", "H141");
d1.put("mfdcountry","Australia");
d1.put("speed",66);
DBObject d2 = new BasicDBObject();
//נתונים עבור אובייקט d2
d2.put("_id", 12);
d2.put("name","Xylo");
d2.put("color", "JetBlue");
d2.put("cno", "H142");
d2.put("mfdcountry","Europe");
d2.put("speed",69);
DBObject d3 = new BasicDBObject();
//נתונים עבור אובייקט d3
d3.put("_id", 13);
d3.put("name","Alto800");
d3.put("color", "JetGrey");
d3.put("cno", "H143");
d3.put("mfdcountry","Austria");
d3.put("speed",74);
//יוצרת רשימה חדשה
List docs = new ArrayList<>();
//מוסיפה את d1, d2 ו־d3 לרשימה docs
docs.add(d1);
docs.add(d2);
docs.add(d3);
//מכניסה את רשימת docs לאוסף
coll.insert(docs);
//שומרת את התוצאה בסדרה
DBCursor carmuldocs = coll.find();
//מדפיסה את תוכן הסדרה
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//שיטה שמכניסה מסמכים עם כמה שדות
public static void insertsomefieldsformultipledocs() throws UnknownHostException{
//מקבלת חיבור חדש למסד הנתונים בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
////משתמשת ב־test כמסד נתונים, השתמשו במסד הנתונים שלכם כאן
DB db=mongoClient.getDB("test");
////משיגה את אובייקט האוסף, משתמשת ב־car כאן, השתמשו בשלכם
DBCollection coll = db.getCollection("car");
//יוצרת אובייקט d1
DBObject d1 = new BasicDBObject();
//מכניסה נתונים עבור שם, צבע ומהירות
d1.put("name","Indica");
d1.put("color", "Silver");
d1.put("cno", "H154");
DBObject d2 = new BasicDBObject();
//מכניסה נתונים עבור זיהוי, שם ומהירות
d2.put("_id", 43);
d2.put("name","Astar");
d2.put("speed",79);
List docs = new ArrayList<>();
docs.add(d1);
docs.add(d2);
coll.insert(docs);
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//שיטה שבודקת אם יש מסמכים כפולים
public static void insertduplicatedocs() throws UnknownHostException{
//מקבלת חיבור חדש למסד הנתונים בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
////משתמשת ב־test כמסד נתונים, השתמשו במסד הנתונים שלכם כאן
DB db=mongoClient.getDB("test");
////משיגה את אובייקט האוסף, משתמשת ב־car כאן, השתמשו בשלכם
DBCollection coll = db.getCollection("car");
DBObject d1 = new BasicDBObject();
//מכניסה נתונים כפולים של id11
d1.put("_id", 11);
d1.put("name","WagonR-Lxi");
coll.insert(d1);
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//שיטה לביצוע רשימת חדריות לא מסודרת
public static void insertbulkunordereddocs() throws UnknownHostException{
//מקבלת חיבור חדש למסד הנתונים בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
////משתמשת ב־test כמסד נתונים, השתמשו במסד הנתונים שלכם כאן
DB db=mongoClient.getDB("test");
////משיגה את אובייקט האוסף, משתמשת ב־car כאן, השתמשו בשלכם
DBCollection coll = db.getCollection("car");
DBObject d1 = new BasicDBObject();
d1.put("name","Suzuki S-4");
d1.put("color", "Yellow");
d1.put("cno", "H167");
d1.put("mfdcountry","Italy");
d1.put("speed",54);
DBObject d2 = new BasicDBObject();
d2.put("name","Santro-Xing");
d2.put("color", "Cyan");
d2.put("cno", "H164");
d2.put("mfdcountry","Holand");
d2.put("speed",76);
//מאתחלת ויוצרת חדריות בולק לא מסודרות
BulkWriteOperation b1 = coll.initializeUnorderedBulkOperation();
//מכניסה את d1 ו־d2 לבולק b1
b1.insert(d1);
b1.insert(d2);
//מבצעת את הבולק
BulkWriteResult r1 = b1.execute();
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
//שיטה לביצוע רשימת חדריות לסדרת רשימה
public static void insertbulkordereddocs() throws UnknownHostException{
//מקבלת חיבור חדש למסד הנתונים בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
////משתמשת ב־test כמסד נתונים, השתמשו במסד הנתונים שלכם כאן
DB db=mongoClient.getDB("test");
////משיגה את אובייקט האוסף, משתמשת ב־car כאן, השתמשו בשלכם
DBCollection coll = db.getCollection("car");
DBObject d1 = new BasicDBObject();
d1.put("name","Palio");
d1.put("color", "Purple");
d1.put("cno", "H183");
d1.put("mfdcountry","Venice");
d1.put("speed",82);
DBObject d2 = new BasicDBObject();
d2.put("name","Micra");
d2.put("color", "Lime");
d2.put("cno", "H186");
d2.put("mfdcountry","Ethopia");
d2.put("speed",84);
//מאתחלת ויוצרת חדריות בולק מסודרות
BulkWriteOperation b1 = coll.initializeOrderedBulkOperation();
b1.insert(d1);
b1.insert(d2);
//קוראת לביצוע
BulkWriteResult r1 = b1.execute();
DBCursor carmuldocs = coll.find();
System.out.println("-----------------------------------");
try {
while(carmuldocs.hasNext()) {
System.out.println(carmuldocs.next());
}
} finally {
carmuldocs.close();//close the cursor
}
}
public static void main(String[] args) throws UnknownHostException{
//קוראת לכל השיטות לבצע פעולת הכנסה
insertmultipledocs();
insertsomefieldsformultipledocs();
insertbulkunordereddocs();
insertbulkordereddocs();
insertduplicatedocs();
}
}
הנה פלט של התוכנית שלמעלה.
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
-----------------------------------------------
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d7"} , "name" : "Indica" , "color" : "Silver" , "cno" : "H154"}
{ "_id" : 43 , "name" : "Astar" , "speed" : 79}
-----------------------------------------------
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d7"} , "name" : "Indica" , "color" : "Silver" , "cno" : "H154"}
{ "_id" : 43 , "name" : "Astar" , "speed" : 79}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d8"} , "name" : "Suzuki S-4" , "color" : "Yellow" , "cno" : "H167" , "mfdcountry" : "Italy" , "speed" : 54}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d9"} , "name" : "Santro-Xing" , "color" : "Cyan" , "cno" : "H164" , "mfdcountry" : "Holand" , "speed" : 76}
-----------------------------------
{ "_id" : 11 , "name" : "WagonR" , "color" : "MetallicSilver" , "cno" : "H141" , "mfdcountry" : "Australia" , "speed" : 66}
{ "_id" : 12 , "name" : "Xylo" , "color" : "JetBlue" , "cno" : "H142" , "mfdcountry" : "Europe" , "speed" : 69}
{ "_id" : 13 , "name" : "Alto800" , "color" : "JetGrey" , "cno" : "H143" , "mfdcountry" : "Austria" , "speed" : 74}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d7"} , "name" : "Indica" , "color" : "Silver" , "cno" : "H154"}
{ "_id" : 43 , "name" : "Astar" , "speed" : 79}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d8"} , "name" : "Suzuki S-4" , "color" : "Yellow" , "cno" : "H167" , "mfdcountry" : "Italy" , "speed" : 54}
{ "_id" : { "$oid" : "548860e803649b8efac5a1d9"} , "name" : "Santro-Xing" , "color" : "Cyan" , "cno" : "H164" , "mfdcountry" : "Holand" , "speed" : 76}
{ "_id" : { "$oid" : "548860e803649b8efac5a1da"} , "name" : "Palio" , "color" : "Purple" , "cno" : "H183" , "mfdcountry" : "Venice" , "speed" : 82}
{ "_id" : { "$oid" : "548860e803649b8efac5a1db"} , "name" : "Micra" , "color" : "Lime" , "cno" : "H186" , "mfdcountry" : "Ethopia" , "speed" : 84}
Exception in thread "main" com.mongodb.MongoException$DuplicateKey: { "serverUsed" : "localhost:27017" , "ok" : 1 , "n" : 0 , "err" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.car.$_id_ dup key: { : 11 }" , "code" : 11000}
at com.mongodb.CommandResult.getWriteException(CommandResult.java:88)
at com.mongodb.CommandResult.getException(CommandResult.java:79)
at com.mongodb.DBCollectionImpl.translateBulkWriteException(DBCollectionImpl.java:314)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:189)
at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165)
at com.mongodb.DBCollection.insert(DBCollection.java:93)
at com.mongodb.DBCollection.insert(DBCollection.java:78)
at com.mongodb.DBCollection.insert(DBCollection.java:120)
at com.journaldev.mongodb.MongoDBBulkInsert.insertduplicatedocs(MongoDBBulkInsert.java:163)
at com.journaldev.mongodb.MongoDBBulkInsert.main(MongoDBBulkInsert.java:304)
אם אתה משתמש ב־MongoDB java driver 3.x, אז ניתן להשתמש בתוכנית הבאה.
package com.journaldev.mongodb.main;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class MongoDBBulkInsert {
public static void main(String[] args) throws UnknownHostException {
// לקרוא לכל השיטות כדי לבצע פעולת הכנסה
insertmultipledocs();
insertsomefieldsformultipledocs();
insertduplicatedocs();
}
// שיטה שמכניסה את כל המסמכים
public static void insertmultipledocs() throws UnknownHostException {
// לקבל חיבור חדש ל־db בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
//// להשתמש ב־test כמסד נתונים, השתמש במסד הנתונים שלך כאן
MongoDatabase db = mongoClient.getDatabase("test");
//// לאחזר אובייקט אוסף, כאן משתמשים ברכב, השתמש בשלך
MongoCollection coll = db.getCollection("car");
// ליצור אובייקט חדש
Document d1 = new Document();
// נתונים עבור אובייקט d1
d1.put("_id", 11);
d1.put("name", "WagonR");
d1.put("color", "MetallicSilver");
d1.put("cno", "H141");
d1.put("mfdcountry", "Australia");
d1.put("speed", 66);
Document d2 = new Document();
// נתונים עבור אובייקט d2
d2.put("_id", 12);
d2.put("name", "Xylo");
d2.put("color", "JetBlue");
d2.put("cno", "H142");
d2.put("mfdcountry", "Europe");
d2.put("speed", 69);
Document d3 = new Document();
// נתונים עבור אובייקט d3
d3.put("_id", 13);
d3.put("name", "Alto800");
d3.put("color", "JetGrey");
d3.put("cno", "H143");
d3.put("mfdcountry", "Austria");
d3.put("speed", 74);
// ליצור רשימה חדשה
List docs = new ArrayList<>();
// להוסיף את d1, d2 ו־d3 לרשימה docs
docs.add(d1);
docs.add(d2);
docs.add(d3);
// להכניס את רשימת docs לאוסף
coll.insertMany(docs);
// לאחסן את התוצאה בקורסור
FindIterable carmuldocs = coll.find();
for (Document d : carmuldocs)
System.out.println(d);
mongoClient.close();
}
// שיטה שמכניסה מסמכים עם כמה שדות
public static void insertsomefieldsformultipledocs() throws UnknownHostException {
// לקבל חיבור חדש ל־db בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
//// להשתמש ב־test כמסד נתונים, השתמש במסד הנתונים שלך כאן
MongoDatabase db = mongoClient.getDatabase("test");
//// לאחזר אובייקט אוסף, כאן משתמשים ברכב, השתמש בשלך
MongoCollection coll = db.getCollection("car");
// ליצור אובייקט d1
Document d1 = new Document();
// להכניס נתונים עבור שם, צבע ומהירות
d1.put("name", "Indica");
d1.put("color", "Silver");
d1.put("cno", "H154");
Document d2 = new Document();
// להכניס נתונים עבור זיהוי, שם ומהירות
d2.put("_id", 43);
d2.put("name", "Astar");
d2.put("speed", 79);
List docs = new ArrayList<>();
docs.add(d1);
docs.add(d2);
coll.insertMany(docs);
FindIterable carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
for (Document d : carmuldocs)
System.out.println(d);
mongoClient.close();
}
// שיטה שבודקת עבור מסמכים כפולים
public static void insertduplicatedocs() throws UnknownHostException {
// לקבל חיבור חדש ל־db בהנחה שהוא רץ
MongoClient mongoClient = new MongoClient("localhost");
//// להשתמש ב־test כמסד נתונים, השתמש במסד הנתונים שלך כאן
MongoDatabase db = mongoClient.getDatabase("test");
//// לאחזר אובייקט אוסף, כאן משתמשים ברכב, השתמש בשלך
MongoCollection coll = db.getCollection("car");
Document d1 = new Document();
// להכניס נתונים כפולים של id11
d1.put("_id", 11);
d1.put("name", "WagonR-Lxi");
coll.insertOne(d1);
FindIterable carmuldocs = coll.find();
System.out.println("-----------------------------------------------");
for (Document d : carmuldocs)
System.out.println(d);
mongoClient.close();
}
}
התמונה למטה מציגה ריצה דוגמתית של תכנית הכנסה המרובה של MongoDB באמצעות Mongo shell ומנהיג Java. זהו כל מה שקשור להכנסה המרובה ב- MongoDB באמצעות Mongo shell ודרייבר Java, ואנחנו נסתכל על פעולות נוספות של MongoDB בפוסטים הבאים.
Source:
https://www.digitalocean.com/community/tutorials/mongodb-bulk-insert-insertmany