鉴于此文档保存在 MongoDB 中
{
_id : ...,
some_key: {
param1 : "val1",
param2 : "val2",
param3 : "val3"
}
}
需要保存一个带有来自外界的param2
和param3
新信息的对象
var new_info = {
param2 : "val2_new",
param3 : "val3_new"
};
我想在对象的现有状态上合并/覆盖新字段,这样 param1 就不会被删除
这样做
db.collection.update( { _id:...} , { $set: { some_key : new_info } }
将导致 MongoDB 完全按照要求执行,并将 some_key 设置为该值。替换旧的。
{
_id : ...,
some_key: {
param2 : "val2_new",
param3 : "val3_new"
}
}
让 MongoDB 只更新新字段的方法是什么(没有明确地一一说明)?得到这个:
{
_id : ...,
some_key: {
param1 : "val1",
param2 : "val2_new",
param3 : "val3_new"
}
}
我正在使用 Java 客户端,但任何示例都将不胜感激
最佳答案
我用自己的函数解决了这个问题。如果您想更新文档中的指定字段,您需要清楚地解决它。
例子:
{
_id : ...,
some_key: {
param1 : "val1",
param2 : "val2",
param3 : "val3"
}
}
如果你只想更新param2,这样做是错误的:
db.collection.update( { _id:...} , { $set: { some_key : new_info } } //WRONG
你必须使用:
db.collection.update( { _id:...} , { $set: { some_key.param2 : new_info } }
所以我写了一个类似的函数:
function _update($id, $data, $options=array()){
$temp = array();
foreach($data as $key => $value)
{
$temp["some_key.".$key] = $value;
}
$collection->update(
array('_id' => $id),
array('$set' => $temp)
);
}
_update('1', array('param2' => 'some data'));
https://stackoverflow.com/questions/10290621/