2017-02-14 55 views
0

我正在使用貓鼬來連接和查詢mongoDB。來自mongoDB的意外輸出

現在,如果我有以下代碼:

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); 
    }); 
    }); 

提供的結果是好的,我們得到預期的輸出。 但是,如果我們有以下查詢,並且我公司提供SAMPLE_SIZE爲2:

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

如果我將它作爲「start-offer-service-dev」在npm腳本中傳遞:「SAMPLE_SIZE = 2 node_modules/.bin/babel-node src/services /offerService/index.js「,那麼它會是一個字符串還是數字? –

+0

是的,我的錯誤,通過npm腳本傳遞的參數是字符串類型,因此必須轉換爲int –

+0

查看我的更新:)很高興你知道了。乾杯。 – matt