[英]$set and positional operator doesn't work in Java?
我在MongoDb集合中有以下稱為hosts
文檔
{ "_id" : ObjectId("532aeec040a83df82181ff3c"),
"os" : "WINDOWS",
"name" : "Host 1",
"bas" : [
{ "wwn" : "EE:00:11:FF", "id" : "1" },
{ "wwn" : "AA:00:11:BB", "id" : "2" } ]
}
現在,我想將name=Host 1
Host中id=1
ba
更新為{ "wwn" : "AA:BB:CC:DD", "id" : "11" }
。 更新后的結果將是
{ "_id" : ObjectId("532aeec040a83df82181ff3c"),
"os" : "WINDOWS",
"name" : "Host 1",
"bas" : [
{ "wwn" : "AA:BB:CC:DD", "id" : "11" },
{ "wwn" : "AA:00:11:BB", "id" : "2" } ]
}
為此,我使用了mongo shell命令
db.hosts.update( { name : "Host 1", "bas.id" : "1" },
{ "$set" : { "bas.$" : { wwn : "AA:BB:CC:DD", id : "11"} }} );
效果很好 。 現在我想使用Java驅動程序做同樣的事情,這是我的代碼
BasicDBObject example = new BasicDBObject("name", "Host 1").append("bas\uff0eid", "1");
BasicDBObject newValue = new BasicDBObject("\u0024set", new BasicDBObject("bas\uff0e\u0024", new BasicDBObject().append("wwn", "AA:BB:CC:DD).append("id","11")) ;
collection.update(example, newValue);
在上面的代碼中,我不得不替換.
使用
\\uff0\u003c/code>和
$
使用\$
以避免拋出異常。 此更新調用不會更新集合。 當我檢查
BasicDBObject.toString()
,JSON與我在控制台上鍵入的JSON相同。 請幫我。
我不明白您為什么需要寫$
和.
Unicode轉義。 我嘗試使用您的實際字符運行您的代碼,並且在2.11 Java驅動程序中運行良好。
但是您的代碼有兩個問題:1)句號.
是\.
,而不是\.
,這是一個非常不同的字符。 2)語句最后部分的語法不正確,但這很可能是復制錯誤。
這是我使用的代碼,並且運行良好(我只創建了對象,實際上並未在數據庫上運行它,但是我不明白為什么這不起作用)。
BasicDBObject example = new BasicDBObject("name", "Host 1").append("bas.id", "1");
BasicDBObject newValue = new BasicDBObject("$set",
new BasicDBObject("bas.$",
new BasicDBObject()
.append("wwn", "AA:BB:CC:DD").append("id","11"))) ;
如果您的值對象沒有以$開頭的鍵,則它將檢查嵌入文檔中是否包含非法字符。 您是否可以在沒有轉義的情況下發布具有此問題的原始代碼?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.