如何将MongoDB集合转换为Java对象?

问题描述 投票:0回答:1

我刚刚开始进入NoSQL(MongoDB)世界,我在试图将我的数据集合转换为java对象进行单独处理时遇到了崩溃。

这是我从mongo得到的集合

{
  "_id": {
    "$oid": "5ebda019508257a3e39e2331"
  },
  "id": "1",
  "nombre": "Lalo",
  "apellido": "Tellez",
  "edad": "18",
  "habilidades": [
    "Android",
    "Tibco",
    "Web"
  ],
  "sueldo": "20000"
}

我已经建立了与mongoDB的连接,这些将是我想分配的对象,它们各自的 GettersSetter.

public class Empleado {
    private ObjectId _id;
    private int numeroRegistro;
    private String nombre;
    private String apellido;
    private int edad;
    private int sueldo;
}

我一直无法推进,因为我找不到一种方法来消耗mongo,并将每个字段分配给java中的每个对象。谢谢你

java mongodb mongodb-java
1个回答
0
投票

据我了解你的问题,你希望每个字段从你的 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 进行解析,我按照你在问题中提到的那样解析了你的文档,我使用了构造函数注入,这是一种 依赖性注入. 您也可以使用 setterinterface injection. 您可以使用以下两种方式执行所有的CRUD操作 MongoRepsitoryMongoTemplate. 另外,我建议使用 MongoTemplate 以便更好地执行。


0
投票

根据你的集合示例,我假设你所有的属性都是'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]
© www.soinside.com 2019 - 2024. All rights reserved.