2017-05-01 24 views
1

Javaを使用して大きなJSONファイル(newclicklogs.json)をmongodbにアップロードしようとしています。ここに私のJSONファイルがどのように見えるかです:ここではJavaを使ってmongodbにjsonファイルをアップロードするには?

{"preview":false,"result":{"search_term":"rania","request_time":"Sat Apr 01 12:47:04 -0400 2017","request_ip":"127.0.0.1","stats_type":"stats","upi":"355658761","unit":"DR","job_title":"Communications Officer","vpu":"INP","organization":"73","city":"Wash","country":"DC","title":"Tom","url":"www.demo.com","tab_name":"People-Tab","page_name":"PEOPLE","result_number":"5","page_num":"0","session_id":"df234f468cb3fe8be","total_results":"5","filter":"qterm=rina","_time":"2017-04-01T12:47:04.000-0400"}} 
{"preview"......} 
{"preview"......} 
.... 

は私のJavaコードは次のとおりです。

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.commons.io.FileUtils; 
import org.bson.Document; 
import com.mongodb.DBObject; 
import com.mongodb.MongoClient; 

public class Main { 

    public static void main(String[] args) throws IOException { 

     String jsonString = FileUtils.readFileToString(new File("data/newclicklogs.json"), "UTF-8"); 

     Document doc = Document.parse(jsonString); 
     List<Document> list = new ArrayList<>(); 
     list.add(doc); 

     new MongoClient().getDatabase("test2").getCollection("collection1").insertMany(list); 

    } 
} 

私はMongoDBのコレクションを照会すると、1つの文書のみが追加取得されます。ファイルからすべてのドキュメントをmongodbコレクションに追加するにはどうすればいいですか?私はmongodbの初心者です。どんな助けもありがとうございます。

答えて

3

バッファ付きリーダーで一括書き込みを試してください。

以下のコードは、ファイルから1行(ドキュメント)の時刻にjsonデータを読み込み、Documentに解析し、データベースに書き込む前にバッチリクエストを行います。

MongoClient client = new MongoClient("localhost", 27017); 
MongoDatabase database = client.getDatabase("test2"); 
MongoCollection<Document> collection = database.getCollection("collection1"); 

int count = 0; 
int batch = 100; 

List<InsertOneModel<Document>> docs = new ArrayList<>(); 

try (BufferedReader br = new BufferedReader(new FileReader("data/newclicklogs.json"))) { 
     String line; 
     while ((line = br.readLine()) != null) { 
     docs.add(new InsertOneModel<>(Document.parse(line))); 
     count++; 
     if (count == batch) { 
      collection.bulkWrite(docs, new BulkWriteOptions().ordered(false)); 
      docs.clear(); 
      count = 0; 
     } 
    } 
} 

if (count > 0) { 
    collection.bulkWrite(docs, new BulkWriteOptions().ordered(false)); 
} 

あなたは、本質的に以前のもののすべてを上書きすることで、最後の文書に文書を縮小している全体JSONでDocument.parseを実行します。

もっとここ

http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/bulk-writes/

+0

おかげでたくさん、Veeram。私はこれを数時間から把握しようとしてきました。あなたは私の日を救った – Rose

+0

バッチを100に指定した理由を知ってもいいですか? – Rose

+1

ようこそ。 Tbh私はそれについても考えなかった。さまざまなバッチサイズで実行し、時間をかけて必要なものを選ぶことができます。私は、60Kレコードでは、あるバッチサイズから別のバッチサイズに大きな違いはありません。 – Veeram

関連する問題