用于在 mongodb 集合中插入包含元素数组的文档的 Java API

标签 java json mongodb

我想使用 java API 将以下 JSON 插入到 Mongodb 集合中。这里的 bookmarks 是书签 POJO 的数组列表。

{
"_id": 5,
"email": "xxx@gmail.com",
"bookmarks": [
    {
        "name": "chipotle",
        "category": "restaurant",
        "stats": "203 likes",
        "tried": true

    },
    {
        "name": "olivegarden",
        "category": "restaurant",
        "stats": "203 likes",
        "tried": true

    }
]
}

我使用了以下 API。但是好像不行

BasicDBObject document = new BasicDBObject();
document.append("email", userList.get(i).getEmail());   
document.append("bookmarks",   userList.get(i).getBookmarksList() ) ;   
WriteResult result = collection.insert(document);

这是我在运行单元测试时遇到的错误。

java.lang.IllegalArgumentException: can't serialize class com.xxx.pojo.Bookmark
at org.bson.BasicBSONEncoder._putObjectField(BasicBSONEncoder.java:272)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:173)
at org.bson.BasicBSONEncoder.putObject(BasicBSONEncoder.java:119)
at com.mongodb.DefaultDBEncoder.writeObject(DefaultDBEncoder.java:27)
at com.mongodb.OutMessage.putObject(OutMessage.java:289)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:239)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:204)
at com.mongodb.DBCollection.insert(DBCollection.java:76)
at com.mongodb.DBCollection.insert(DBCollection.java:60)
at com.mongodb.DBCollection.insert(DBCollection.java:105)

即使在使 Bookmark POJO 可序列化之后,我再次遇到相同的错误。所以我猜我使用 Java API 以错误的方式插入。如何将 POJO 直接映射到 mongodb 元素中?

最佳答案

由于错误提示 can't serialize class com.xxx.pojo.Bookmark ,这意味着 List 包含 Bookmark.class不能直接插入到 BasicDBObject 文档中。

您需要使用:BasicDBList,如下所示:

BasicDBList bookmark_list = new BasicDBList();
List<Bookmark> bmk_list = userList.get(i).getBookmarksList();
for(int i=0;i<bmk_list.size();i++)
{
String name = bmk_list.get(i).getName();
String category = bmk_list.get(i).getCategory();
String stats = bmk_list.get(i).getStats();
boolean tried = bmk_list.get(i).getTried();
DBObject db_obj = new BasicDBObject();
db_obj.put("name",name);
db_obj.put("category",category);
db_obj.put("stats",stats);
db_obj.put("tried",tried);
bookmark_list.add(db_obj);
}

现在将此 bookmark_list 添加到您的文档中,如下所示:

BasicDBObject document = new BasicDBObject();
document.append("email", userList.get(i).getEmail());   
document.append("bookmarks",  bookmark_list ) ;  
WriteResult result = collection.insert(document);

关于用于在 mongodb 集合中插入包含元素数组的文档的 Java API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23192279/

相关文章:

java - 从后台线程更新 Java Swing 组件

java - 将 Java 8 GC 日志重定向到 stderr

java - 无法识别的字段类未标记为可忽略

xml - Delphi 中的 JSON 与 XML 解析速度

mongodb - 使用 mongo-go-driver,如何有效地从 WriteError 中检索重复的字段名称?

java - 在子类和父类(super class)中具有相同的变量

java - Android 如何在 Activity 之间传递 LinkedHashMap?

javascript - 谷歌图表 + mysqli 没有绘制

python - PyMongo 通过多个值查找

java - 使用 Morphia 检索引用的文档会返回奇怪的错误