使用MongoDB Java驱动程序更新嵌入式文档中的字段?
我正试图使用Java驱动程序对MongoDB中的嵌入式文档执行更新,但收到一个IllegalArgumentException,该异常声明“数据库中存储的字段不能有.在它们中” 我的文档具有以下结构:使用MongoDB Java驱动程序更新嵌入式文档中的字段?,java,mongodb,Java,Mongodb,我正试图使用Java驱动程序对MongoDB中的嵌入式文档执行更新,但收到一个IllegalArgumentException,该异常声明“数据库中存储的字段不能有.在它们中” 我的文档具有以下结构: { "_id" : ObjectId("5155d102a47d7b00b7e4bed2"), "foo" : { "bar" : { "name" : "Now" } } } 我想执行这样的更新 var query
{
"_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);
但它会重击嵌入的bar对象,破坏名称
我也试过:
BasicDBObject foo = new BasicDBObject();
foo.append("foo.bar.time", new Date());
samples.update(query, foo)
但是收到一个非法的辩论例外
我看到了在堆栈溢出上选择的其他答案,包括这个点符号。有什么我遗漏的吗?更新嵌入文档中字段的正确方法是什么?在上一个示例中,
$set
部分缺失,这可能是问题的原因。试一试
samples.update(
query,
new BasicDBObject(
"$set",
new BasicDBObject("foo.bar.time", new Date())
));
相反。在上一个示例中,
$set
部分缺失,这可能是问题的原因。尝试samples.update(查询,新建BasicDBObject($set),新建BasicDBObject(“foo.bar.time”,new Date())代码>取而代之。@nutlike,就是这样。谢谢。很高兴能帮上忙-我把我的评论贴出来作为答案,这样你就可以把你的问题标记为已解决。