2016-03-30 4 views
0

私はモデルをインスタンス化する際にこの面白いことに気づいたことがあります。インスタンスはインスタンス自体以外の手段で変更できます。ここでは例です:あなたは一例では、私はnexusnameプロパティを変更することはありません見ることができるようにマングース - モデルのインスタンスはどうなっていますか?

var articleSchema = new Schema({ 
    name: 'String', 
    price: 'Number' 
}); 

var Article = mongoose.model('Article', articleSchema); 

var nexus = new Article({ 
    name: 'Nexus 5', 
    price: 300 
}); 

nexus.save(function(err, instance) { 
    instance.name = 'Nexus Five'; 
    instance.save(function(err, instance2) { 
     instance2.name = 'Nexus 5ive'; 
     instance2.save(function(err, instance3) { 
      console.log(nexus.name); //'Nexus 5ive' 
     }); 
    }); 
}); 

、私はsave関数がコールバックで返されるモデルのプロパティを変更しました。このようにデータを変更することで問題はありませんか?または、最初に定義されたインスタンス(つまり、nexus変数)に固執するだけですか?あなたが扱っているもののコントロールを簡単に失うことができるので、ちょっと混乱しているようです。

答えて

1

save関数はモデルを返します。あなたが望むなら、あなたはそれを変更し続けることができます。

しかし、元に戻ったモデルインスタンスは、保存したモデルインスタンスと常に同じになるため、元のモデルに変更を加えないことが本当に有用であるとは想像できません。元の文書を突然変異させて保存し、再度突然変異させてからもう一度保存するのと同じトークンで、あなたの例でコードを記述するシナリオはありません。

新しいオプションでfindOneAndUpdateを呼び出すと、ドキュメントの新鮮なコピー(別のクライアントによって変更された可能性がある)であるため、返されたモデルインスタンスが突然有効になります。

関連する問題