我正在用Java学习MongoDB.我正在尝试使用Java驱动程序将数据插入MongoDB.我正在插入像MongoDB教程一样,每件事都很好.但是,如果我想插入一个变量,当我运行代码时,驱动程序会抛出这样的错误:
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class io.github.ilkgunel.mongodb.Pojo.
Run Code Online (Sandbox Code Playgroud)
我在Stack Overflow中解决了这样的问题,但我无法理解任何事情,我找不到任何解决此错误的方法.我的代码如下.怎么能解决这个问题?
我正在使用此代码:
package io.github.ilkgunel.mongodb;
import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
public class MongoDBBasicUsage {
public static void main(String[] args) {
MongoClient mongoClient;
try {
Pojo pojo = new Pojo();
mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("MongoDB");
pojo.setId("1");
pojo.setName("ilkay");
pojo.setSurname("günel");
Document document = new Document();
document.put("person", pojo);
database.getCollection("Records").insertOne(document);
} catch (Exception e) {
System.err.println("Bir Hata Meydana Geldi!");
System.out.println("Hata" + e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的Pojo是这样的:
package io.github.ilkgunel.mongodb;
public class Pojo {
String name;
String surname;
String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
Dal*_*ips 12
从你想要做的事情来看,你正试图添加一些自定义数据类型(在这种情况下你的POJO),但你需要记住的是文档中的字段只能接受某些数据类型,而不是直接接受对象.
如果你也不知道,Mongo Documents的结构与json相同.因此,您必须通过创建字段并将值插入其中来明确地创建文档.值字段中允许使用特定数据类型:
http://mongodb.github.io/mongo-java-driver/3.0/bson/documents/
为了帮助解决您的问题,下面的代码将您的POJO作为参数并了解POJO的结构,返回可以插入到您的集合中的Mongo文档:
private Document pojoToDoc(Pojo pojo){
Document doc = new Document();
doc.put("Name",pojo.getName());
doc.put("Surname",pojo.getSurname());
doc.put("id",pojo.getId());
return doc;
}
Run Code Online (Sandbox Code Playgroud)
这应该适用于插入.如果要索引其中一个字段:
database.getCollection("Records").createIndex(new Document("id", 1));
Run Code Online (Sandbox Code Playgroud)
我希望这能回答你的问题并为你效劳.
有点抽象,因为这可能会为其他开发人员节省时间。
此错误:CodecConfigurationException:找不到类 xxx 的编解码器意味着您的 mongo 驱动程序无法处理您在您创建的对象中发送的数据该 xxx 类因此无法生成您想要的 mongo 查询。
在这种情况下,解决方案是使用正确的类,即使用驱动程序期望的类之一(在我的例子中,用 ArrayList 对象替换 java 数组解决了问题)。另一个解决方案可能是升级您的驱动程序。第三种解决方案可能是@Renato 提到的,定义您自己的解码逻辑。这取决于您的具体情况。
哈
| 归档时间: |
|
| 查看次数: |
33232 次 |
| 最近记录: |