gpt4 book ai didi

java - Mongo Java 驱动程序 3 - 使用扩展 'Document' 的对象

转载 作者:可可西里 更新时间:2023-11-01 10:24:51 26 4
gpt4 key购买 nike

Mongo Java 驱动程序 3 添加了对 Codec infrastructure 的支持,我正在下面尝试。默认情况下,它带有以下 3 个对象的编解码器:Document、BasicDBObject 和 BsonDocument。

我试图通过让我的类 MyClass 扩展 Document 来做一些非常简单的事情。但是,它失败并显示内联指示的错误。

我找到了这个 gist但它似乎过于复杂.. 是否没有一种简单的方法可以将 MyClass 注册为编解码器,因为它也是一个文档?

谢谢。-亨宁

public class PlayMongo {
static class MyClass extends Document {
public MyClass(String key, Object value) {
super(key, value);
}
}

public static void main(String[] args) {
MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("test");

// Works like a charm
MongoCollection<Document> documentCollection = db.getCollection("docs");
documentCollection.insertOne(new Document().append("hello", "world"));

// Fails with CodecConfigurationException: Can't find a codec for class play.reactivemongo.PlayMongo$MyClass
MongoCollection<MyClass> myClassCollection = db.getCollection("myclasses", MyClass.class);
myClassCollection.insertOne(new MyClass("hello", "world"));
}
}

最佳答案

制作它的最简单方法是使用 Morphia . Morphia 准备将 Java 对象映射到 MongoDB 集合。我做了一个例子,你可以看到它是如何工作的。在这个例子中,MongoDB 有一个名为 people 的集合,它映射到一个名为 Person 的 Java 类。 Person 看起来像这样:

@Entity("people")
public class Person {
private String firstName;
private String lastName;

//obrigactory constructor for Morphia
public Person() {
}

public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}

public String getFirstName() {
return firstName;
}

public String getLastName() {
return lastName;
}

@Override
public String toString() {
return firstName + " " + lastName;
}

}

Morphia 知道 Person 对象对应于 people 集合,因为 Entity 注释。它还需要一个没有参数的构造函数来正确转换对象,这就是为什么我们在那里有一个。

MongoDB Java Driver 已经非常简单了,但是 Morphia 使得 CRUD 操作变得更加简单。下一段代码将在数据库中插入和检索一个人:

        Morphia morphia = new Morphia();
Datastore datastore = morphia.createDatastore(new MongoClient(), "test");

Person johnDoe = new Person("John", "Doe");

//saves John Doe on DB
datastore.save(johnDoe);

//retrieves all people whose first name is John
List<Person> people = datastore.createQuery(Person.class).filter("firstName", "John").asList();

System.out.println(people.size()); //prints 1
Person person = people.get(0);

System.out.println(person); //prints John Doe

如您所见,我们只需要说明将使用哪个 Java 类,然后 Morphia 就可以根据它找到的注释来发现正确的集合。之后一个简单的 save 就足以将对象插入到数据库中。检索数据基本上是相同的过程:通知您想要的类以及您的过滤器。

请务必记住,Morphia 会带来额外的性能成本。在大多数情况下,它不会产生任何影响,但您需要评估您的场景并运行一些您自己的测试。

关于java - Mongo Java 驱动程序 3 - 使用扩展 'Document' 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35050866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com