2017-02-14 15 views
0

mongooseを使用してmongoDBに接続して照会しています。mongoDBからのUnexpected出力

は、今私は、次のコードがある場合:

return new Promise((resolve) => { 
    mongoose.connection.db.collection('offer').aggregate([{ 
     $match: { 
     $or: [ 
      { 
      ccChecked: { 
       $lt: new Date(currentDay + 'T00:00:00.000Z') 
      } 
      }, 
      { 
      ccChecked: { 
       $exists: 0 
      } 
      } 
     ], 
     _id: { $in: offerObjIds } 
     } 
    }, 
    { $sample: { size: 2 } } 
    ], (err, res) => { 
     console.log('res is', res); 
     resolve(res); 
    }); 
    }); 

提供結果は結構ですが、私たちは、予想される出力を取得します。 しかし、我々は次のクエリを持っている、と私は2としてSAMPLE_SIZEを提供する場合:この場合

const sampleSize = process.env.SAMPLE_SIZE 
    return new Promise((resolve) => { 
    mongoose.connection.db.collection('offer').aggregate([{ 
     $match: { 
     $or: [ 
      { 
      ccChecked: { 
       $lt: new Date(currentDay + 'T00:00:00.000Z') 
      } 
      }, 
      { 
      ccChecked: { 
       $exists: 0 
      } 
      } 
     ], 
     _id: { $in: offerObjIds } 
     } 
    }, 
    { $sample: { size: sampleSize } } 
    ], (err, res) => { 
     console.log('res is', res); 
     resolve(res); 
    }); 
    }); 

、私は結果は未定義得ます。誰かがなぜそのような振る舞いを説明し、process.env変数を通してこれを解決するかを説明することはできますか?

答えて

0

sampleSizeが整数であることを確認してください。変数process.envからの文字列になる可能性があります。

{ $sample: { size: <positive integer> } }

アップデート: 私は、コマンドライン上でスクリプトをテストしました。結果参照:

set SAMPLE_SIZE=1&& node example.js

example.js

console.log(process.env); 

出力:

{... SAMPLE_SIZE: '1'、...}

+0

npmスクリプトで "start-offer-service-dev"として渡した場合: "SAMPLE_SIZE = 2 node_modules/.bin/babel-node src/services /offerService/index.js "、それは文字列か数値ですか? –

+0

よろしく、私の間違いですが、npmスクリプトを通過する引数は文字列型なので、intに変換する必要があります –

+0

私の更新を見てください:)あなたはそれを理解して嬉しいです。乾杯。 – matt