2016-12-15 1 views
0

私は、データ構造の下に持つコレクションを持っているが存在しない場合は作成Updateまたはモンゴ3.0.4

ここ{ "Shop": "123", "date": "28-05-2015", "Points": { "a": "1", "b": "2", "c": "3" } }

店と日付が_id以外のユニークなインデックスとIDなしがありました、 は、だから私はしたい場合はbの値だけを更新し、レコードの一致(アカウントと日付に基づく)がない場合は、bの値と同じ構造を持つ新しいレコードを作成する必要があります。 一番重要な部分は、一括処理ということです。私はすべてのショップのためにレコードを作成/更新する必要があります。これらのレコードは1日あたりのショップごとに作成されます。既存のレコードです。私は春を使用しています。 upsertでupdateを使用しようとしましたが、更新された値だけで新しいレコードを作成するのではなく、複数のショップを指定した更新ポイントで更新するのに最適です。

+0

あなたはここにアップサートコードを投稿することができます。 –

+0

私はMongoシェル自体でそれをやっていました。 mongo 3.4では、動作していたupdateに$ setフラグがありますが、それは3.0にはありません。私は数時間でコードを更新するつもりです。 –

+0

私はあなたのコードに対してそれを確認することができるいくつかのサンプルコードを追加します。 –

答えて

0
//search a document that doesn't exist 
Query query = new Query(); 
query.addCriteria(Criteria.where("points.b").is("some value")); 

Update update = new Update(); 
update.set("b", some value); 
update.set..... //set all needed fields else they go as null 

mongoOperation.upsert(query, update, Shop.class); 

Shop shopTestObj = mongoOperation.findOne(query, Shop.class); 
System.out.println("shopTestObj - " + shopTestObj); 
バルク操作の場合

// Sample code 
com.mongodb.DBCollection collection = db.getCollection("shop"); 

// Get BulkWriteOperation by accessing the mongodb com.mongodb.DBCollection class on mycol //Collection 

BulkWriteOperation bulkWriteOperation= collection.initializeUnorderedBulkOperation(); 

//perform the upsert operation in the loop to add objects for bulk execution 
for (int i=0;i<100;i++) 
{ 
// get a bulkWriteRequestBuilder by issuing find on the shop with _id 
BulkWriteRequestBuilder bulkWriteRequestBuilder=bulkWriteOperation.find(new BasicDBObject('_id',Integer.valueOf(i))); 

// get hold of upsert operation from bulkWriteRequestBuilder 
BulkUpdateRequestBuilder updateReq=    bulkWriteRequestBuilder?.upsert() 

updateReq. replaceOne (new BasicDBObject("_id",Integer.valueOf(i)).append("points.b", "some value")); 

} 
// execute bulk operation on shop collection 
BulkWriteResult result=bulkWriteOperation.execute(); 
+0

BulkWriteRequestBuilderが_idに基づいている、またはupsertが_idに基づいている理由は何ですか? –

+0

はちょうどサンプルです。 –

+0

私は一括更新なしで上部を取得しました。あなたは一括更新の部分を説明することができます。もし私がオブジェクトのリストを持っていて、ショップと日付がユニークであると言うことができますので、 BasicDBObjectを使用して、どのように私のオブジェクトを使用することができます –