gpt4 book ai didi

java - $set 和位置运算符在 Java 中不起作用?

转载 作者:行者123 更新时间:2023-11-30 03:58:23 24 4
gpt4 key购买 nike

我在 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 的主机中 id=1ba 更新为 { "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,并将 $ 替换为 \u0024 以避免抛出异常。此更新调用未更新集合。当我检查 BasicDBObject.toString() 时,JSON 与我在控制台上输入的内容相同。请帮助我。

最佳答案

我不明白为什么您需要将 $. 编写为 Unicode 转义符。我尝试使用其中的实际字符运行您的代码,它在 2.11 Java 驱动程序中运行良好。

但是你的代码有两个问题:1)句号.\u002e,而不是\uff0e,这是一个非常不同的特点。 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"))) ;

关于java - $set 和位置运算符在 Java 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com