Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MongoDB Java驱动程序更新嵌入式文档中的字段?_Java_Mongodb - Fatal编程技术网

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

使用MongoDB Java驱动程序更新嵌入式文档中的字段?,java,mongodb,Java,Mongodb,我正试图使用Java驱动程序对MongoDB中的嵌入式文档执行更新,但收到一个IllegalArgumentException,该异常声明“数据库中存储的字段不能有.在它们中” 我的文档具有以下结构: { "_id" : ObjectId("5155d102a47d7b00b7e4bed2"), "foo" : { "bar" : { "name" : "Now" } } } 我想执行这样的更新 var query

我正试图使用Java驱动程序对MongoDB中的嵌入式文档执行更新,但收到一个IllegalArgumentException,该异常声明“数据库中存储的字段不能有.在它们中”

我的文档具有以下结构:

{
    "_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,就是这样。谢谢。很高兴能帮上忙-我把我的评论贴出来作为答案,这样你就可以把你的问题标记为已解决。