我试图将一个元素添加到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/

10-10 22:51