0

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

谷歌搜索后,我在该字段中添加了@objectId注释_id,但在下面的 root couse 中给了我一个错误;

任何帮助..

模型类

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)
4

1 回答 1

1

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

如果您需要让数据库为您的文档发出 id,那么您必须使用org.bson.types.ObjectId 名称为的字段类型_id并将其留空。如果您想添加一个 id 作为您的选择,则使用您想要的名称定义一个类型的字段_id并为其分配适当的值。如果您将其留空,mongo 将添加一个类型的 id,ObjectId这将导致我遇到的后续问题。

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

于 2016-09-27T18:51:05.407 回答