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