私は現在、JSON パッチ仕様を使用して、Mongoose ORM を使用して MongoDB を部分的に更新する API を構築しています。
ノード モジュールmongoose-json-patchを使用して、次のようにドキュメントにパッチを適用しています。
var patchUpdate = function(req, res){
var patches = req.body;
var id = req.params.id;
User.findById(id, function(err, user){
if(err){ res.send(err);}
user.patch(patches, function(err){
if(err){ res.send(err);}
user.save(function(err){
if(err) {res.send(err);}
else {res.send("Update(s) successful" + user);}
});
});
});
};
主な問題は、JSON パッチ構文で配列要素を削除または置換しようとしたときに発生します。
var patches = [{"op":"replace", "path": "/interests/0", "value":"Working"}]
var user = {
name: "Chad",
interests: ["Walking", "Eating", "Driving"]
}
これにより、配列の最初の項目 (「Walking」) が新しい値 (「Working」) に置き換えられますが、実際に何が置き換えられているかを検証する方法がわかりません。パッチが適用される前に別のリクエストが /interests/0 を削除した場合、「食べる」は「歩く」ではなく「働く」に置き換えられ、配列には存在しなくなります。
クライアントが「Walking」を編集していると思っている場合は、編集に成功するか、少なくともエラーが発生することを確認したいと思います。