我试图将一个元素添加到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 {“之前:” {oid $“:” 515c5eb88e3278e9c9d55867“},” unreadMsgs“:[]}
递增unreadMsgs后:{“ _id”:{“ $ oid”:“ 515c5eb88e3278e9c9d55867”},“ unreadMsgs”:[{“ id”:1,“ unreadMsg”:1}]}
检查结果:{“ _id”:{“ $ oid”:“ 515c5eb88e3278e9c9d55867”},“ unreadMsgs”:[]}
最佳答案
问题是coll.save(dbObject)没有更新任何内容。
它用作插入,并且由于_id已存在于集合中,因此您将得到一个plicateKey异常(由于配置,您只是没有看到它)。
您必须使用更新,here是
关于java - Mongodb:无法保存添加到BasicDBList中的新元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15798820/