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
MongoDB和Java:概念方面的愿景_Java_Mongodb_Nosql - Fatal编程技术网

MongoDB和Java:概念方面的愿景

MongoDB和Java:概念方面的愿景,java,mongodb,nosql,Java,Mongodb,Nosql,我正在开发一个JavaWeb服务,它允许用户与mongoDB中存储的数据进行交互(CRUD操作)。就概念而言,有一件事困扰着我: Java是面向对象的,当您定义类时,您可以永久地定义对象的属性,并且不应该在定义类之后动态地修改它们 在我的web服务中,使用mongoDB是因为文档的结构和内容可能会随着时间的推移而改变 我觉得mongoDB和Java在灵活性方面并不相似。我没有找到讨论这个问题的任何消息来源 我考虑过两种不同的解决方案: 第一个解决方案 我的第一个想法是创建如下所示的模型类: pa

我正在开发一个JavaWeb服务,它允许用户与mongoDB中存储的数据进行交互(CRUD操作)。就概念而言,有一件事困扰着我:

Java是面向对象的,当您定义类时,您可以永久地定义对象的属性,并且不应该在定义类之后动态地修改它们

在我的web服务中,使用mongoDB是因为文档的结构和内容可能会随着时间的推移而改变

我觉得mongoDB和Java在灵活性方面并不相似。我没有找到讨论这个问题的任何消息来源

我考虑过两种不同的解决方案:

第一个解决方案

我的第一个想法是创建如下所示的模型类:

package classes;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.bson.Document;
import org.bson.types.ObjectId;
import org.mongodb.morphia.annotations.Id;

import com.mongodb.DBObject;

@XmlRootElement
public class Plante extends Model{

    private ObjectId _id;
    private String name;

    public Plante(){}

    public Plante(String nom){
        this.name = nom;
    }

    public Plante(ObjectId id, String nom){
        this._id = id;
        this.name = nom;
    }

    @XmlElement
    public String get_id(){
        return this._id.toString();
    }

    @XmlElement
    public String getName(){
        return this.name;
    }

    public void setName(String nom){
        this.name = nom;
    }

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

    public Document toDocument(){
        Document resultat = new Document();
        resultat.put("name", this.getName());
        return resultat;
    }
}
对于检索数据和插入数据,我将使用以下类型的函数:

@Override
public <T extends Model> ArrayList<T> findAll() {
    ArrayList<T> resultats = new ArrayList<T>();
    try {
        Gson gson = new Gson();

        FindIterable<Document> allDocs = this.collection.find();
        for(Document doc : allDocs){
            T element;
            element = (T) gson.fromJson(doc.toJson(), Class.forName("classes." + nomClasse));
            resultats.add(element);
        } 
    }
    catch (JsonSyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
    return resultats;
}

@Override
public String insert(Model newM){
    this.collection.insertOne(newM.toDocument());
    return "OK";
}
很抱歉,如果我的代码不清楚,那么架构相当复杂,对于这个问题理解起来并不重要

第二种解决方案

由于POJO与mongoDB文档相比没有那么灵活,我想到了另一个解决方案,在这个解决方案中,我没有任何“Object”类,但由于调用了URL,我知道用户希望在哪个集合中插入对象。 例如:

http://localhost:8080/webservice/plante
使用这个url,我只需将在请求体中收到的JSON直接插入集合“plante”

您对这两种解决方案有何看法?第二个脏吗?还是比第一次更好? 还有别的解决办法吗

PS:我现在不能真正改变语言,即使Java看起来不是一个好的选择,因为我的实习已经结束,而且这个web服务也做了很多其他的事情


PS2:如果我的问题看起来很愚蠢,我很抱歉,我是整个noSQL领域的新手

您的第二个解决方案有点像您将如何与REST API交互。检查此线程:并阅读有关此主题的更多信息,这可能是您想要的。我的web服务是一个REST API。我只是在为我的web服务中与mongoDB数据库交互的所有操作寻找最优雅的解决方案。
http://localhost:8080/webservice/plante