Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Java 直接在mongoDB中更新地图_Java_Mongodb_Map_Updates - Fatal编程技术网

Java 直接在mongoDB中更新地图

Java 直接在mongoDB中更新地图,java,mongodb,map,updates,Java,Mongodb,Map,Updates,我在mongoDB中有一个集合,它的文档有3个字段,如下所示: { "_id" : { "$oid" : "5396ad5de4b09ea27a641ed6"} , "word" : "test_word" , "doc_occurrence" : "'total':25,'sport':10" , "total_occurrence" : "'total':32,'sport':15" } 我想知道我可以直接使用java(例如使用dot)更新密钥的值吗?

我在mongoDB中有一个集合,它的文档有3个字段,如下所示:

{ 
    "_id" : { "$oid" : "5396ad5de4b09ea27a641ed6"} , 
    "word" : "test_word" , 
    "doc_occurrence" : "'total':25,'sport':10" ,
    "total_occurrence" : "'total':32,'sport':15"
}
我想知道我可以直接使用java(例如使用dot)更新密钥的值吗?或者我必须完整地获取地图并以这种方式更新

如果我必须使用子文档通过点符号更新值,我必须使用什么类型的数据类型来保留子文档字段

p、 s:上面的集合结构是用java打印的。 mongo终端的采集结构如下:

{ 
   "_id" : ObjectId("5396d751e4b0cabeab49be0b"), 
   "word" : "test_word", 
   "doc_occurrence" : { "total" : 25, "sport" : 10 }, 
   "total_occurrence" : { "total" : 32, "sport" : 15 }  
}

我想你在找我。此问题或多或少会处理您的问题:


我也不确定你的文件的结构。。。可能您在
doc\u事件
total\u事件
中忘记了一些
{}
,您可以通过以下方式更新单个字段:

    BasicDBObject query = new BasicDBObject(
        "_id", new ObjectId("5396ad5de4b09ea27a641ed6")
    );
    BasicDBObject update = new BasicDBObject(
        "$set", new BasicDBObject("doc_occurance.total", 30)
    );

    table.update(query,update);

因此,它使用操作符和“点表示法”来标识和单独更新子文档中的元素。您可以在更新的操作员部分中指定所需的任意多个字段。

您使用的是什么mongodb Java驱动程序?我使用mongo-Java-driver-2.10.1OK,该驱动程序似乎将JSON文档表示为s。您应该使用它的方法来构建/修改文档。实际上,insert方法需要一段时间。