java - Mongodb:无法保存添加到 BasicDBList 中的新元素

标签 java mongodb mongodb-java

我试图向 BasicDBList 数组添加一个元素并将其保存回 Mongodb,但是当我检查结果时,它没有被写入。我做错了什么?我使用java驱动程序版本2.7.2。

DBObject dbObject = coll.findOne(dbQuery);

BasicDBList unreadMsgs = (BasicDBList) dbObject.get("unreadMsgs");

Logger.debug("before incrementing unreadMsgs" + dbObject.toString());

unreadMsgs.add(new BasicDBObject("id", 1).append("unreadMsg", 1));
Logger.debug("after incrementing unreadMsgs : " + dbObject.toString());
coll.save(dbObject);
Logger.debug("check result: " + coll.findOne(dbQuery).toString());

在增加 unreadMsgs 之前{ "_id": { "$oid": "515c5eb88e3278e9c9d55867"} , "unreadMsgs": [ ]}

增加 unreadMsgs : { "_id": { "$oid": "515c5eb88e3278e9c9d55867"} , "unreadMsgs": [ { "id": 1 , "unreadMsg": 1}]}

检查结果:{ "_id": { "$oid": "515c5eb88e3278e9c9d55867"} , "unreadMsgs": [ ]}

最佳答案

问题是 coll.save(dbObject) 没有更新任何内容。

它用作插入,并且由于 _id 已存在于集合中,因此您将收到重复 key 异常(只是由于配置而看不到它)。

您必须使用更新,here是怎么回事

关于java - Mongodb:无法保存添加到 BasicDBList 中的新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15798820/

相关文章:

java - 此处不允许使用 Void-type 错误

java - IntelliJ IDEA 看不到项目 gradle 模块

java - 在 Spring Data MongoDB 中使用 List 参数进行存储库查询

c# - MongoDB 中的正则表达式 + 选项(C# 驱动程序)

java - 从字符串到 MongoDB ObjectID 的转换

java - Selenium 自动化 - 如何从此列表中选择一个下拉菜单项而不会出现异常错误?

java - 如何将 ZXing 的二维码结果用作字符串?

php - 在 PHP 中内部加入 mongoDB

mongodb - MongoCollection.forEach 是否需要线程安全?

java - MongoDB 匹配数组中的所有元素