2017-02-14 4 views
0

Я использую mongoose для подключения и запроса mongoDB.UnExpected output from 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> } }

Update: Я проверял скрипт на моей командной строке. Смотрите результаты:

set SAMPLE_SIZE=1&& node example.js

example.js

console.log(process.env); 

Выход:

{... SAMPLE_SIZE: '1', ...}

+0

Если я передам его в сценарии npm как «start-offer-сервис-dev»: «SAMPLE_SIZE = 2 node_modules/.bin/babel-node src/services /offerService/index.js ", то это будет строка или число? –

+0

Yup, моя ошибка, аргументы, переданные через сценарий npm, имеют строковый тип и поэтому должны быть преобразованы в int –

+0

См. Мое обновление :) Рад, что вы это поняли. Приветствия. – matt