我刚刚开始进入NoSQL(MongoDB)世界,我在试图将我的数据集合转换为java对象进行单独处理时遇到了崩溃。
这是我从mongo得到的集合
{
"_id": {
"$oid": "5ebda019508257a3e39e2331"
},
"id": "1",
"nombre": "Lalo",
"apellido": "Tellez",
"edad": "18",
"habilidades": [
"Android",
"Tibco",
"Web"
],
"sueldo": "20000"
}
我已经建立了与mongoDB的连接,这些将是我想分配的对象,它们各自的 Getters
和 Setter
.
public class Empleado {
private ObjectId _id;
private int numeroRegistro;
private String nombre;
private String apellido;
private int edad;
private int sueldo;
}
我一直无法推进,因为我找不到一种方法来消耗mongo,并将每个字段分配给java中的每个对象。谢谢你
据我了解你的问题,你希望每个字段从你的 MongoDB document
. 我以为你会通过你的 MongoDB document
到端点。如果你有一个集合对象,你想提取每个字段,那么你必须解析这个对象,你将进一步处理。所以我使用了 **constructor injection**
和 **JSON parsing**
. 还有,你忘了声明 habilidades
但我已经在模型中声明。
@Document
public class Empleado {
private ObjectId _id;
private int numeroRegistro;
private String nombre;
private String apellido;
private int edad;
private int sueldo;
private List<String> habilidades;
public Empleado(ObjectId _id, int numeroRegistro, String nombre, String apellido, int edad, int sueldo,
List<String> habilidades) {
super();
this._id = _id;
this.numeroRegistro = numeroRegistro;
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
this.sueldo = sueldo;
this.habilidades = habilidades;
}
// Getters and Setters
}
@PostMapping("/insert")
public void insert(@RequestBody String doc) {
try {
JSONObject jsonObject = (JSONObject) new JSONParser().parse(doc);
JSONObject obj = (JSONObject) jsonObject.get("_id");
JSONArray array = (JSONArray) jsonObject.get("habilidades");
Empleado empleado = new Empleado((ObjectId) obj.get("$oid"),
Integer.parseInt(jsonObject.get("id").toString()), jsonObject.get("nombre").toString(),
jsonObject.get("apellido").toString(), Integer.parseInt(jsonObject.get("edad").toString()),
Integer.parseInt(jsonObject.get("sueldo").toString()), array);
// do something using getters and setters
} catch (Exception e) {
e.printStackTrace();
}
}
我用的是 简单的JSON 进行解析,我按照你在问题中提到的那样解析了你的文档,我使用了构造函数注入,这是一种 依赖性注入. 您也可以使用 setter
或 interface injection
. 您可以使用以下两种方式执行所有的CRUD操作 MongoRepsitory 或 MongoTemplate. 另外,我建议使用 MongoTemplate
以便更好地执行。
根据你的集合示例,我假设你所有的属性都是'String'类型。对于分配到你的POJO,这里是Java类。
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
//Other Imports
public class MyClass {
public static void main(String[] args) {
MongoClient mongoClient = new MongoClient();
//This registry is required for your Mongo document to POJO conversion
CodecRegistry codecRegistry = fromRegistries(MongoClient.getDefaultCodecRegistry(),
fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoDatabase database = mongoClient.getDatabase("mydb").withCodecRegistry(codecRegistry);
MongoCollection<Empleado> collection = database.getCollection("mycoll", Empleado.class);
//This assigns your collection to your list of Java objects
List<Empleado> docs = collection.find(new Document(), Empleado.class).into(new ArrayList<Empleado>());
for(Empleado doc:docs) {
System.out.println("nombre="+doc.getNombre());
System.out.println("apellido="+doc.getApellido());
System.out.println("habilidades="+doc.getHabilidades());
//Display other attributes of your Mongodoc
}
mongoClient.close();
}
}
这里是示例输出。
nombre=Lalo
apellido=Tellez
habilidades=[Android, Tibco, Web]