gpt4 book ai didi

java - 使用 MongoDB Java 驱动程序更新嵌入式文档中的字段?

转载 作者:可可西里 更新时间:2023-11-01 09:24:57 25 4
gpt4 key购买 nike

我正在尝试使用 Java 驱动程序对 MongoDB 中的嵌入式文档执行更新,但收到一个 IllegalArgumentException,指出“存储在数据库中的字段不能有 . in them”

我的文档具有以下结构:

{
"_id" : ObjectId("5155d102a47d7b00b7e4bed2"),
"foo" : {
"bar" : {
"name" : "Now"
}
}
}

我想执行这样的更新

var query = {_id:ObjectId("5155d102a47d7b00b7e4bed2")};
var update = {"foo.bar.time":new Date()};
var withSet = {$set:update};
db.samples.update(query,withSet);

从控制台正确修改文档

{
"_id" : ObjectId("5155d102a47d7b00b7e4bed2"),
"foo" : {
"bar" : {
"name" : "Now",
"time" : ISODate("2013-03-29T18:02:51.591Z")
}
}
}

尝试在 Java 中做同样的事情我没有成功。我试过这个:

BasicDBObject query = new BasicDBObject("_id", new ObjectId("5155d102a47d7b00b7e4bed2"));

BasicDBObject time = new BasicDBObject("time", new Date());
BasicDBObject bar = new BasicDBObject("bar", time);
BasicDBObject foo = new BasicDBObject("foo", bar);
BasicDBObject withSet = new BasicDBObject("$set", foo);

samples.update(query, withSet);

但它破坏了嵌入的条形对象,破坏了名称。

我也试过:

BasicDBObject foo = new BasicDBObject();
foo.append("foo.bar.time", new Date());
samples.update(query, foo)

但是收到 IllegalArgumentException。

我在 Stack Overflow 上看到其他选择的答案也包含此点符号。有什么我想念的吗?更新嵌入式文档中字段的正确方法是什么?

最佳答案

在您的最后一个示例中,缺少 $set 部分,这可能会导致问题。尝试

samples.update(
query,
new BasicDBObject(
"$set",
new BasicDBObject("foo.bar.time", new Date())
));

相反。

关于java - 使用 MongoDB Java 驱动程序更新嵌入式文档中的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15708958/

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