我想添加一個元素到BasicDBList數組並將其保存回Mongodb,但是當我檢查結果時,它沒有寫入。我做錯了什麼?我使用java驅動程序版本2.7.2。Mongodb:無法保存添加到BasicDBList中的新元素
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」:[]}
根據您的配置,您可能在寫入實際發生之前正在讀取。你幾秒鐘後直接從mongo shell檢查過嗎? – assylias 2013-04-04 00:22:27
是的,我直接從mongo shell中檢查了一段時間。結果相同。 – coolsuntraveler 2013-04-04 00:28:40
如果使用ACKNOWLEDGED writeconcern(默認使用MongoClient或者使用Mongo:'mongo.setWriteConcern(WriteConcern.ACKNOWLEDGED);'),則可以檢查是否有錯誤:'WriteResult result = coll.save(dbObject); '看看'result.getError()'是否返回錯誤。 – assylias 2013-04-04 00:37:13