2016-11-09 8 views
1

NodeJSサービスでMongoClientを使用しています。
私のサービスのパフォーマンスを向上させる一環として、Mongoを照会するという点で、複数のIDを持つ単一のIDを扱うときに、私が異なる動作をするべきかどうかを判断したいと考えています。

私の現在のコードは次のようになります。
collection.find({ id: {$in: ids } })

私は、単一のidは別に多少のように、任意のより良いパフォーマンスをするだろう処理するコードを分割するかどう知りたいと思った:
if ids.count == 1 collection.findOne({ id: ids.first }) else collection.find({ id: {$in: ids } }) end

+0

クエリでexplain()関数を使用するようにしてください。実行時間を比較する。次のようにしてシェルから実行できます。db.collection.findOne({_ id: "id"})。explain(); – felix

+0

ありがとう@felix、私は 'explain()'を使用し、 'winning({id:{$ in:[some_id])}'と 'find({id:some_id})'を同じwinningPlanで実行しました! :) –

答えて

1

NodeJSのMongoDBドライバによれば、findOneはfind()の代わりに非難されています。

非推奨、使用検索()。限界(1).next(関数(ERR、DOC){})の代わり

http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#findOne

さらに、findOne()があるの構文糖find().limit(1).toArray()

プロダクションで使用する前に何かが推奨されていないことを強くお勧めします。at that link

+0

'findOne'は私の主な焦点ではありません。' {id:{$ in:[some_id]} 'で' find'を使うと議論しています。 :some_id} 'はパフォーマンスに影響します。 –

+0

@BarakHariziベンチマークする場合は、廃止予定の機能を避ける必要があります。私は$ inと$ inでテストしました。結果は絶対に匹敵します(1msと1ms)。より良いアプローチ:「必要なものを使う」。だから個人的には、より良いアプローチとして「改善/改善」のスピードを避けるように提案することができます。 –

+0

私はexplain()を使って実際にどのような勝利プランが得られたのかをよく理解しています。同じ勝利プランなので、単一/複数のアプローチでは分けないことに決めました。 –

関連する問題