您好我有一个Mongo Pojo列表我想使用upsert。我不知道如何使用我的pojo。
@Test
public void testAgentDataStorage() {
AgentDataStorage a = new AgentDataStorage(124l);
DBCollection collection = mongoTemplate.getDb().getCollection("agent_data_storage");
BulkWriteOperation bulkWriteOperation = collection.initializeUnorderedBulkOperation();
BulkWriteRequestBuilder bulkWriteRequestBuilder = bulkWriteOperation.find((DBObject) a);
BulkUpdateRequestBuilder updateReq = bulkWriteRequestBuilder.upsert();
a.getDataPoints().put("TOTAL_INCENTIVE_EARNINGS" , 13);
updateReq.replaceOne((DBObject) a);
BulkWriteResult result = bulkWriteOperation.execute();
}
这里AgentDataStorage是我的pojo,这段代码给出了错误 无法将AgentDataStorage强制转换为com.mongodb.DBObject 。 以下是我的AgentDataStorage
@CompoundIndex(name = "account_date_idx", def = "{'account' : 1, 'date' : 1}", unique = true)
@Document(collection = "agent_data_storage")
public class AgentDataStorage extends MongoKeyedEntity<String> implements Serializable {
public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Field
private Long account;
@Field()
private String date;
@Field
private Map<String, Integer> dataPoints = new HashMap<>();
public AgentDataStorage(Long account) {
this.account = account;
this.date = dateFormat.format(new Date());
for (AgentDataPoints dataPoint : EnumSet.allOf(AgentDataPoints.class)) {
this.dataPoints.put(dataPoint.toString(), 0);
}
}
public AgentDataStorage(String account) {
this.account = Long.valueOf(account);
for (AgentDataPoints dataPoint : EnumSet.allOf(AgentDataPoints.class)) {
this.dataPoints.put(dataPoint.toString(), 0);
}
}
public AgentDataStorage(Long account, Date date) {
this.account = account;
this.date = dateFormat.format(date);
for (AgentDataPoints dataPoint : EnumSet.allOf(AgentDataPoints.class)) {
this.dataPoints.put(dataPoint.toString(), 0);
}
}
public AgentDataStorage(Long account, Date date, Map<String, Integer> dataPoints) {
this.account = account;
this.date = dateFormat.format(date);
this.dataPoints = dataPoints;
}
public AgentDataStorage(String account, Date date) {
this.account = Long.valueOf(account);
this.date = dateFormat.format(date);
for (AgentDataPoints dataPoint : EnumSet.allOf(AgentDataPoints.class)) {
this.dataPoints.put(dataPoint.toString(), 0);
}
}
public AgentDataStorage(String account, String date) {
this.account = Long.valueOf(account);
this.date = date;
for (AgentDataPoints dataPoint : EnumSet.allOf(AgentDataPoints.class)) {
this.dataPoints.put(dataPoint.toString(), 0);
}
}
public Long getAccount() {
return account;
}
public void setAccount(Long account) {
this.account = account;
}
public Date getDate() throws ParseException {
return dateFormat.parse(this.date);
}
public void setDate(Date date) {
this.date = dateFormat.format(date);
}
public Map<String, Integer> getDataPoints() {
return dataPoints;
}
public void setDataPoints(Map<String, Integer> dataPoints) {
this.dataPoints = dataPoints;
}
public void updateDataPoint(AgentDataPoints agentDataPoints, Integer value) {
this.dataPoints.put(String.valueOf(agentDataPoints), value);
}
答案 0 :(得分:0)
Mongo Java Driver不支持复杂类型,看起来你的pojos是用spring mongo db annotation注释的。
您在这里有几个选项MongoTemplate
和MongoRepository
。
MongoTemplate:http://docs.spring.io/spring-data/data-mongo/docs/1.10.0.M1/reference/html/#mongo-template
MongoRepository:http://docs.spring.io/spring-data/data-mongo/docs/1.10.0.M1/reference/html/#mongo.repositories