我在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 }
}
答案 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
运算符部分中指定所需的字段数。