2017-12-20 14 views
0

Model.findOne()メソッドを使用する場合、戻り値をそのフィールドだけに制限する文字列を含めることができますが、findByIdメソッドでこれを実行しようとするとうまくいかないようです。findByIdを使用して指定されたフィールドを返します。 Mongoose MongoDB

以下の例は、人為的な例です。実際の_idを使用していますが、最初の例を使用すると機能しますが、findByIdメソッドを使用したいのは、私の心の後ろにある小さな声が、より速い(たぶん)ということです。

例:

let Joe = new PersonModel({ 
    _id: ObjectId("12345") 
    name: 'Joe', 
    age: 30, 
    password: 'GreatPW' 
}).save(); 

今ジョーを見つけ、そして唯一の彼の名前と年齢を返します。これは動作します!

PersonModel.findOne({_id: Joe._id}, 'name age') 
    .then(person => console.log(person)) 

ここでもfindById()を使用して同じことを行います。これは私のために働いていません。

PersonModel.findById(Joe._id, 'name age') 
    .then(person => console.log(person)) 
+2

findByIdはfindOneを呼び出し、それはより速くすることができません。ソースは[こちら](http://mongoosejs.com/docs/api.html#model_Model.findById)です。投射はfindByIdでも有効です。 – MikaS

+0

あなたは間違いなく、これは現在機能しています。それは昨晩のコードに影響する何か他のものだったに違いない。これを回答として追加すると、私はあなたに正しい回答があるとマークします。 – TJBlackman

+2

うまくいきました。再現不可能な問題は本当に答えられるはずではないので、私のコメントは十分だと思います。とにかくありがとう。 – MikaS

答えて

1

Mongooseのログインを有効にします。これら2つの呼び出しの唯一の違いは、findByIdからfindOneからの追加の関数呼び出しであることがわかります。

ソースコード参照:(MikaSによって提供される)findById

関連する問題