2016-12-22 6 views
1

私はmongoDBコレクションにドキュメントを挿入するnodeJSアプリケーションを開発中です。ドキュメントには、作成時刻を記録するcreatedAtフィールドがあります。私はまた、コンソールにクエリの最新の一致を記録する機能があります。mongoDBクエリの結果でmoment.maxを使用するとエラーが発生する

コード:

function getResult(player){ 
    let timeList = []; 
    MongoClient.connect(url, (err, db) => { 
    if(err){ 
    console.log(err); 
    } 
    else{ 
    let count = db.collection('PokeBook').count({ 'player1': player }); //count function returns a promise 
     count.then((val) => { 
     db.collection('PokeBook').find({ 'player1': player }).forEach((doc) => { 
      timeList.push(doc.createdAt); 
      console.log(doc.createdAt); 
      if(val===timeList.length){ 
      myEmitter.emit('full', timeList); 
      } 
     }); 
     }); 
    } 
    }); 
}  

//code for the emitter: 
myEmitter.on('full', (arr) => { 
    console.log('full emitted'); 
    console.log(moment.max(arr)); 
}); 

コードの瞬間を言って、エラーを返す[i]を.isValidは関数ではありません。 moment.maxコード行にコメントすると、コンソールに "full emitted"を正常に記録できます。

これがなぜ起こり、どのようにこれを修正するのかについてのアドバイスは、非常に高く評価されます。 :)

答えて

1

moment.max()Momentオブジェクトの配列を期待するが、doc.createdAtは(おそらく)正規Dateを目的とします。あなたは交換してみてくださいすることができます

timeList.push(doc.createdAt); 

で:

timeList.push(moment(doc.createdAt)); 

のでarrMomentオブジェクトの配列になります。

console.log(arr.sort()[arr.length-1]); 
+0

それは別のエラーにこの時間を返します:locale.longDateFormatは関数ではありません

また、あなたはdoc.createdAtDateNumberのいずれかであると仮定すると、瞬間を使用してO/W maxを自分で実装することができます。 – Ajmal

+0

'doc.createdAt'の' typeof'は何ですか?さらに、私は別のオプションで自分の答えを更新しました。 – GilZ

+0

彼らはモーメントオブジェクトでした。 Dateオブジェクトを生成するようにコードを変更し、最初のメソッドを使用しましたが、うまくいきました。ありがとうございました! :) – Ajmal

関連する問題