2017-01-22 11 views
0

オブジェクトが原因で操作が失敗した場合、mongooseコールバックが取得する引数についてのドキュメントを探していました。_idが見つかりません。私は何も見つけることができません。そこで私は自分で3つのケースを比較しました。 = 'foofoofoofoo'idと呼ばれる次の処理が行われます。_idが見つからない場合、mongooseコールバックの結果

// returns: err = null, obj = null 
mySchema.statics.findById = function(id, cb) { 
    this.findOne({ _id: new ObjectId(id) }, cb); 
} 

// returns: err = null, obj is a cursor with obj.result = { n: 0, ok: 1 } 
mySchema.statics.deleteById = function(id, cb) { 
    this.remove({ _id: new ObjectId(id) }, cb); 
} 

// returns: err = null, obj is an Object with obj = { n: 0, nModified: 0, ok: 1 } 
mySchema.statics.updateById = function(id, updObj, cb) { 
    this.where({ _id: new ObjectId(id) }).update(updObj, cb); 
} 

この私見は恐ろしい結果です。私はの2番目の引数として3つの完全に異なる型を得ます:null、カーソルと単純なオブジェクトです。 cursor.resultでさえ、構造内の「単純オブジェクト」と同じではありません。

私の質問は以下のとおりです。

  1. アムは、私は、このような矛盾した結果につながり、ここでいくつかのアンチパターン/混合構文を使用していますか?
  2. さまざまな状況で、mongooseコールバックがどのような結果を呼び出すかについての詳細はどこにありますか?
+0

ドキュメント内のこれらのリンクを読むことができると思います。 1)http://mongoosejs.com/docs/models.html 2)http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate 個人的には常にエラーを処理しようとしています。 :-) –

+0

1)あなたのリンクをありがとうございますが、正確にはそのドキュメントでは、_idが見つからなかった場合にコールバックが何を取得するかについて詳細はわかりません。 2)私が提示した3つのケースすべてにエラーはありません:( –

答えて

1

コールバック関数の第2パラメータresultは、操作によって異なります。どこでもコールバックはマングースでクエリに渡され

は、コールバックがパターンcallback(error, results)に従います。詳細hereを参照してください。何resultsであることは操作に依存します:findOne()については

  • それは潜在的にnullを単一の文書です。
  • find()文書
  • count()のリストなどの文書
  • update()文書の数がに影響を与えたの数、

API docs for Modelsが渡されているものについての詳細を提供コールバック

このヘルプが必要です。

+0

リンクと引用のためのタンク - 残念なことに私の実験によれば、これは返されたものではありません。例えば "update"は '{n:0、nModified:0 、ok:1} '、" remove "はカーソルを返します。私はこれをupvoteしますが、それを受け入れる答えにすることはできません。 –

関連する問題