sql >> データベース >  >> NoSQL >> MongoDB

MongoDBのオブジェクトを部分的に更新して、新しいオブジェクトが既存のオブジェクトとオーバーレイ/マージされるようにするにはどうすればよいですか?

    自分の関数で解決しました。ドキュメント内の指定されたフィールドを更新する場合は、明確に対処する必要があります。

    例:

    {
        _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'));
    


    1. MongoDB $ dayOfWeek

    2. MongooseはMongodbの`findAndModify`メソッドをサポートしていますか?

    3. mongodbは、ドキュメントをあるコレクションから別のコレクションに移動します

    4. MongoDB-テキストフィールドのインデックスとテキストインデックスの違いは?