2017-04-26 1 views
0
[ 
    { 
     "_id": "59009087f8ed4e2ecc91fcbe", 
     "password": "test", 
     "email": "", 
     "username": "root", 
     "__v": 3, 
     "stats": [ 
      { 
       "_id": "590090a0f8ed4e2ecc91fcbf", 
       "time": 98, 
       "scramble": "U2 F R U' R B' L' U L' B2 R2 B F' U2 R' B2 R2 D R2 U", 
       "type": "three", 
       "status": 0, 
       "date": "2017-04-26T12:20:48.622Z" 
      }, 
      { 
       "_id": "590090adf8ed4e2ecc91fcc0", 
       "time": 120, 
       "scramble": "R2 U2 D' U' B D B L' U2 R2 F2 L2 R' F2 U F2 L2 D L2", 
       "type": "three", 
       "status": 0, 
       "date": "2017-04-26T12:21:01.318Z" 
      }, 
      { 
       "_id": "590090da8f0e120320f36945", 
       "time": 191, 
       "scramble": "F2 B' L F R B' F B' D' F2 R2 B U' D' F U D B' F' D", 
       "type": "four", 
       "status": 0, 
       "date": "2017-04-26T12:21:46.679Z" 
      } 
     ], 
     "accountDate": "2017-04-26T12:20:23.085Z" 
    } 
] 

私はユーザーのコレクションを持っています。ユーザーの1人が上記のコードに示されています。そのIDで1人のユーザーを選択したいと思います。その後、選択したユーザーから、タイプが「3」の統計配列のオブジェクトが必要になります。私はかなりの時間を探して、解決策を見つけられませんでした。私が使っている現在の方法はこれです:モデル内のクエリモデル

User.findOne({ 
     _id: id 
    }, function (err, user) { 
     if(err){ 
      console.log(err); 
     } else { 
      user.stats.forEach(function (time, i, array) { 
       if(time.type != req.body.type){ 
        array.splice(i, 1); 
       } 
      }); 
      res.send(user.stats); 
     } 

}); 

問題は、統計の配列が大きくなりすぎますと、プロセスが非常に遅くなるということです。

答えて

0

クエリで統計配列から選択する方法が見つからない場合は、間違った種類の統計情報を除外するために少なくともspliceを使用しないでください。フィルターを使用するか、タイプ3の統計を新しい配列にプッシュして、パフォーマンスが向上するかどうかを確認してください。

https://jsperf.com/splice-vs-filter

+0

私はそれを行いました。私のTTFBは約250msです。それはいいですか?ときには2秒にジャンプすることもあります。 – mrf1freak

関連する問題