gpt4 book ai didi

java - 如何使用java在mongoDB中保存和读取 map

转载 作者:行者123 更新时间:2023-12-02 05:45:14 31 4
gpt4 key购买 nike

我在 mongo 中有一个集合,其中包含 3 列,如下所示:

{ 
"_id" : { "$oid" : "5396ad5de4b09ea27a641ed6"} ,
"word" : "test_word" ,
"doc_occurrence" : "'total':25,'sport':10" ,
"total_occurrence" : "'total':32,'sport':15"
}

doc_occurrence 和total_occurrence 是Map。我以这种方式将文档插入集合:

        private boolean add(String word, Map<String, Integer> docOccurrence, Map<String, Integer> totalOccurrence) {
BasicDBObject document = new BasicDBObject();
document.put("word", word);
document.put("docOccurrence", docOccurrence);
document.put("totalOccurrence", totalOccurrence);
try {
synchronized (LOCK_WRITE) {
table.insert(WriteConcern.SAFE,document);


}
} catch (MongoException e) {
logger.error("Could not insert new row to word_cat : {}", e.getMessage());
return false;
}
return true;
}

我想以这种方式从数据库读取 map :

        BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("word",word);
try {
DBCursor cursor = table.find(searchQuery);
if (cursor.hasNext()) {
DBObject doc = cursor.next();
Map<String, Integer> map = (Map<String, Integer>)doc.get("docOccurrence"); // ClassCastException

但我明白了

java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map

有什么方法可以直接从数据库读取 map 吗?如果没有,有什么替代方案?

p.s: BSON 将映射转换为字符串。事实上 BSON 键必须是 String!

最佳答案

这里的问题是,您已经创建了 BSON 对象,并将 Map 部分放置在构造函数的“字符串”大小中,因此在此调用中存在隐式“stringify”。

作为 BSON 对象构造函数的唯一参数包装,然后 Map 正确序列化:

document.put("word", word);
document.put("docOccurrence", new BasicDBObject(docOccurrence));
document.put("totalOccurrence", new BasicDBObject(totalOccurrence));

BasicDBObject 类实现 AbstractMap 接口(interface),并且应该能够以这种方式用于读取的数据。其余代码应该按预期工作。

关于java - 如何使用java在mongoDB中保存和读取 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136070/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com