直接在mongoDB中更新地图

时间:2014-06-10 11:40:03

标签: 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)吗?或者我必须完全获取地图并以这种方式更新?

如果我必须使用子文档通过点表示法更新值,我必须使用哪种类型的数据类型来保存子目标字段?

p.s:上面的集合结构是用java打印的。 mongo终端的集合结构是这样的:

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

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找findAndModify。这个问题或多或少会对您的问题产生影响:MongoDb's $set equivalent in its java Driver

我也不确定您的文档结构......也许您在{ }doc_occurrence忘记了一些total_occurrence

答案 1 :(得分:0)

您可以通过以下方式更新单个字段:

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

    table.update(query,update);

因此,这使用$set运算符并使用"点符号"识别并单独更新子文档中的元素。您可以在更新的$set运算符部分中指定所需的字段数。