У меня возникла проблема. Я пытаюсь обновить, если уже существует else insert, если не присутствует. Я использую Bulk API драйвера весны-монго.Не удалось обновить mongo навалом, используя updateone с 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();
Но все поля не обновляются. Может ли кто-нибудь сказать мне причину и replaceOne работает нормально, но он будет воссоздавать Индекс, если он есть.
Можете ли вы добавить пример, где он не работает? Не уверен, что делает 'convertToDBObjectToUpdate (supcInfo) '. нам даже нужна операция объемной записи, когда все, что вы пытаетесь сделать, это только обновление? – Veeram
Прошу прощения. Это dbObject. Я пытаюсь обновить supcinfo, который содержит от 5 до 7 полей, но он обновляет первый и последний, только означает _id и updateTs. { \t \t "supc": "supc15", \t \t "pogId": 1354619, \t \t "MRP": 3322323, \t \t "цена": 99232323, \t \t "primarySellerCode": "" , \t \t "camsEnabled": правда, \t \t "доступность": "в наличии" \t} – cody123