[英]$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.