有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想使用JavaAPI将以下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)

即使在使书签POJO可序列化之后,我还是再次出现了同样的错误。所以我猜我使用Java API进行插入是错误的。如何将POJO直接映射到mongodb元素


共 (1) 个答案

  1. # 1 楼答案

    正如错误所暗示的can't serialize class com.xxx.pojo.Bookmark,这意味着包含Bookmark.classList不能直接插入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);