Mongodb更新或插入mongojak - Java

时间:2016-09-27 04:59:43

标签: java mongodb mongojack

我是MongoDB和Mongojack的新手,我正在尝试更新文档,如果它已经退出或者插入新文档。出于测试目的,我使用下面的代码,即按钮点击事件。我的问题是,当我第一次单击该按钮时,它会添加一个带有生成的对象ID的文档,但是当我再次单击时,它会添加另一个具有相同对象ID的文档。我期望每次只更新一个文档。

在Google上搜索后,我在@objectId字段中添加了_id注释,但在下面的根目录中给出了一个错误;

任何帮助..

模型类

public class Transport implements StockLoadable {
    // @ObjectId 
private String _id;
private String info;

public String getInfo() {
    return info;
}

public void setInfo(String info) {
    this.info = info;
}


public String get_id() {
    return _id;
}


public void set_id(String _id) {
    this._id = _id;
}

@Override
public String toString() {
    return "Vehicle";
}

@Override
public void setStock(Stock stock) {
    // TODO Auto-generated method stub

}

@Override
public Stock getStock() {
    // TODO Auto-generated method stub
    return null;
}

}

按钮点击事件

Transport transport;
btn.addClickListener(o->{
        if(transport==null){
        transport= new Transport();
        transport.setInfo("Info");
        }
        try (MongoClient mongoClient = new MongoClient("localhost",27017)) {
            DB db = mongoClient.getDB("transport");
            DBCollection table = db.getCollection("test");
            JacksonDBCollection<Transport, String> collection = JacksonDBCollection.wrap(table, Transport.class, String.class);
            WriteResult<Transport, String> result = collection.save(transport);
            System.out.println(result.getSavedId());
            transport= collection.findOne(DBQuery.is("_id",result.getSavedId()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    });

添加注释后我遇到的根例外

Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.introspect.Annotated.getType()Lcom/fasterxml/jackson/databind/JavaType;
at org.mongojack.internal.MongoAnnotationIntrospector.findDeserializer(MongoAnnotationIntrospector.java:86)
at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.findDeserializer(AnnotationIntrospectorPair.java:515)
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findDeserializerFromAnnotation(BasicDeserializerFactory.java:1648)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.constructSettableProperty(BeanDeserializerFactory.java:721)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.addBeanProps(BeanDeserializerFactory.java:498)

1 个答案:

答案 0 :(得分:0)

我正在回答我自己的问题,这可能对其他人有用。 复制文档的原因是我对mongodb自动id过程的误解。

如果您需要让db为您的文档发出ID,那么您必须使用名称为org.bson.types.ObjectId的{​​{1}}字段类型并将其留空。 如果要添加ID作为选择,请使用名称_id定义具有所需类型的字段,并为其指定适当的值。如果你把它留空,mongo会添加一个_id类型的id,这将导致我的问题。

将问题解决后的ObjectId字段类型从_id更改为String。但我无法找到异常的原因。刚刚删除了注释。