2016-12-25 3 views
2

Update zu aktualisieren Ich stehe vor einem Problem. Ich versuche zu aktualisieren, wenn bereits existiert sonst einfügen, wenn nicht vorhanden. Ich benutze Bulk API von Feder-Mongo-Treiber.Nicht in der Lage, Mongo in Bulk updateone mit Upsert

DBCollection dbCollection = mongoTemplate.getCollection("supcInfo"); 
     BulkWriteOperation bulkWriteOperation = dbCollection.initializeUnorderedBulkOperation(); 
BulkUpdateRequestBuilder builder = bulkWriteOperation.find(new BasicDBObject("_id", supcInfo.getSupc())).upsert(); 
BasicDBObject dbObject = new BasicDBObject("$set",new BasicDBObject("_id", supcInfo.getSupc())); 
     dbObject = dbObject.append("$set",new BasicDBObject("pogId", supcInfo.getPogId())); 
     dbObject = dbObject.append("$set",new BasicDBObject("mrp", supcInfo.getMrp())); 
     dbObject = dbObject.append("$set",new BasicDBObject("price", supcInfo.getPrice())); 
     dbObject = dbObject.append("$set",new BasicDBObject("primarySellerCode", supcInfo.getPrimarySellerCode())); 
     dbObject = dbObject.append("$set",new BasicDBObject("camsEnabled", supcInfo.isCamsEnabled())); 
     dbObject = dbObject.append("$set",new BasicDBObject("availability", supcInfo.getAvailability())); 
     dbObject = dbObject.append("$set",new BasicDBObject("updateTs", supcInfo.getUpdateTs())); 
builder.updateOne(dbObject); 
bulkWriteOperation.execute(); 

Alle Felder werden jedoch nicht aktualisiert. Kann mir jemand Grund sagen und replaceOne funktioniert gut, aber es wird Index neu erstellen, wenn es welche gibt.

+0

Können Sie ein Beispiel hinzufügen, wo es nicht funktioniert? Nicht sicher was "convertToDBObjectToUpdate (supcInfo)" tut. Brauchen wir sogar einen Bulk-Write-Vorgang, wenn alles, was Sie zu tun versuchen, nur aktualisiert wird? – Veeram

+0

Es tut mir leid. Es ist DbObject. Ich versuche supfinfo zu aktualisieren, die 5 bis 7 Felder enthält, aber es aktualisiert zuerst und das letzte bedeutet nur _id und updateTs. { \t \t "SUPC": "supc15", \t \t "pogId": 1.354.619, \t \t "mrp": 3.322.323, \t \t "Preis": 99.232.323, \t \t "primarySellerCode": "" , \t \t "camsEnabled": true, \t \t "Verfügbarkeit": "auf Lager" \t} – cody123

Antwort

1

Sie brauchen die Bulk-Schreiboperationen hier nicht. Sie können das reguläre Update verwenden und Sie sollten in Ordnung sein.

Ihre Verwendung von DBObject ist falsch. Sie überschreiben den $ set-Schlüssel.

BasicDBObject updateFields = new BasicDBObject("pogId", supcInfo.getPogId()).append("mrp", supcInfo.getMrp()); // Rest of fields. 
BasicDBObject dbObject = new BasicDBObject("$set",updateFields); 
+0

Danke. Ich habe herausgefunden, wo ich Fehler gemacht habe. Ich aktualisiere jedoch Bulk, weil es 100 Updates pro Sekunde gibt. – cody123