我试图向 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/