Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongo Java驱动程序3-使用对象扩展';文件';_Java_Mongodb - Fatal编程技术网

Mongo Java驱动程序3-使用对象扩展';文件';

Mongo Java驱动程序3-使用对象扩展';文件';,java,mongodb,Java,Mongodb,MongoJava驱动程序3增加了对的支持,我将在下面尝试。默认情况下,它附带以下3个对象的编解码器:Document、BasicDBObject和BsonDocument 我试图通过让我的类MyClass扩展文档来做一些非常简单的事情。但是,它失败了,出现了内联指示的错误 我发现了这个,但它似乎太复杂了。。既然MyClass也是一个文档,那么是否有一种简单的方法将其注册为编解码器 多谢各位。 -亨宁 公共类PlayMongo{ 静态类MyClass扩展了文档{ 公共MyClass(字符串键、对

MongoJava驱动程序3增加了对的支持,我将在下面尝试。默认情况下,它附带以下3个对象的编解码器:Document、BasicDBObject和BsonDocument

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

我发现了这个,但它似乎太复杂了。。既然MyClass也是一个文档,那么是否有一种简单的方法将其注册为编解码器

多谢各位。 -亨宁

公共类PlayMongo{
静态类MyClass扩展了文档{
公共MyClass(字符串键、对象值){
超级(键、值);
}
}
公共静态void main(字符串[]args){
MongoClient MongoClient=新的MongoClient();
MongoDatabase db=mongoClient.getDatabase(“测试”);
//很有魅力
MongoCollection documentCollection=db.getCollection(“文档”);
insertOne(newdocument().append(“hello”,“world”));
//CodeConfigurationException失败:找不到类play的编解码器。reactivemongo.PlayMongo$MyClass
MongoCollection myClassCollection=db.getCollection(“myclasses”,MyClass.class);
插入器(新的MyClass(“你好”,“世界”));
}
}

最简单的方法是使用。Morphia准备将Java对象映射到MongoDB集合。我做了一个例子,你可以看到它是如何工作的。在本例中,MongoDB有一个名为
people
的集合,该集合映射到名为
Person
的Java类。
人员
如下所示:

@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集合相对应。它还需要一个没有参数的构造函数来正确转换对象,这就是为什么我们有一个构造函数

MongoDB Java驱动程序已经相当简单了,但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
Morphia Morphia=new Morphia();
Datastore Datastore=morphia.createDatastore(新的MongoClient(),“test”);
人约翰多=新人(“约翰”、“多伊”);
//在DB上救了John Doe
datastore.save(约翰多);
//检索名为John的所有人
List people=datastore.createQuery(Person.class).filter(“firstName”,“John”).asList();
System.out.println(people.size())//印刷品1
个人=个人。获取(0);
系统输出打印项次(人)//约翰·多伊的照片
正如您所看到的,我们只需要说明将使用哪个Java类,然后Morphia就可以根据找到的注释发现正确的集合。在此之后,只需进行一次简单的
保存
,即可在数据库中插入对象。检索数据的过程基本相同:通知所需的类以及过滤器


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

我创建了一个小型库,用于为POJO自动创建编解码器。如果您不想使用Morphia这样的大型库,请访问:


它既适用于新mongo驱动程序的同步版本,也适用于异步版本。

这样就可以了。。我喜欢它,因为它很干净。谢谢你,丹尼尔!
        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