使用Jackson @JsonAnySetter映射模型可以使用MongoTemplate.updateFirst()吗?

时间:2014-06-25 21:17:55

标签: java spring mongodb jackson mongotemplate

我使用Jackson将随机XML字段映射到MongoDB(效果很好)。课程是:

@JacksonXmlRootElement(localName = "event")
public class NextEvent {
@Id
public String id;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}   
@JacksonXmlProperty(localName="key")
public String key;
public String getKey() {
    return key;
}
public void setKey(String key) {
    this.key = key;
}
private Map<String, String> event = new TreeMap<String, String>();
@JsonAnyGetter
public Map<String, String> get() {
    return event;
}
@JsonAnySetter
public void set(String name, String value) {
    event.put(name, value);
}
}

我的问题是如何基于关键字段使用MongoTemplate.updateFirst()来创建一种更新文档的创造性方法。我不想改变身份证,但我想更新任何其他字段。这些字段是随机的(因此使用Map作为getter和setter);因此,单独更新字段不是一种选择。

我已经玩过下面的方法,但无济于事;有什么想法吗?提前感谢您的帮助。

    public void updateNextEvent2(NextEvent event) {
    DBObject userDBObject = (DBObject) mongoTemplate.getConverter().convertToMongoType(event);      
    BasicQuery query = new BasicQuery("{ 'key' : '" + event.getKey() + "' }");
    Update setUpdate = Update.fromDBObject(new BasicDBObject("$set", userDBObject));
    mongoTemplate.updateFirst(query, setUpdate, NextEvent.class);      
    }

1 个答案:

答案 0 :(得分:0)

解决了与更新/查询不同的路线:

mongoTemplate.getDb().getCollection(COLLECTION_NAME).update(new 
BasicDBObject("key",event.getKey()), new BasicDBObject ("$set", userDBObject), false, false);