2015-04-03 2 views
4

Я делаю запрос Mongoose/MongoDB .aggregate с $limit в конвейере. Когда я использую номер, например 2, он отлично работает. Если я установил переменную как testNum = 2, а затем сделаю {$limit: varNum}, она отлично работает. Но если я отправлю запрос REST и попробую сделать $limit: req.body.show, он говорит, что значение не является числом.«ограничение должно быть указано как число» при использовании req.query.property

Я могу видеть, что это число до console.log. Другие запросы в конвейере не жалуются, что им не дают числа. Вот код:

var show = req.query.show, // the number of items to show per page 
    page = req.query.page, // the current page being asked for 
    stream = req.params.stream, // the type of content to get 
    skip = (page > 0 ? ((page - 1) * show) : 0), // amount to skip 
    testNum = 3 

console.log(show + " " + skip + " " + page) 

Content.aggregate([ 
    { $unwind: '$users' }, 
    { $group: { 
     _id: '$_id', 
     title: { $first: '$title' }, 
     description: { $first: '$description' }, 
     images: { $first: '$images' }, 
     url: { $first: '$url' }, 
     saveCount: { $sum: 1 } } 
    }, 
    { $sort: { saveCount: -1 } }, 
    { $skip: skip }, 
    { $limit: show } 
]) 
.exec() 

Запрос здесь ?show=2&page=1. Выход консоли - 2 0 1. Это работает правильно.

Полная ошибка здесь:

{ [MongoError: exception: the limit must be specified as a number] 
name: 'MongoError', 
errmsg: 'exception: the limit must be specified as a number', 
code: 15957, 
ok: 0 } 

ответ

5

По какой-то причине show обращаются как строка в случае $limit, но ничего не кажется, не возражает. Я сделал это, чтобы исправить это, но я думаю, что это может быть ошибкой с Express или Mongoose/MongoDB. Если кто-нибудь знает, где это сделать, дайте мне знать.

Исправление заключается в использовании parseInt так:

var show = parseInt(req.query.show), // the number of items to show per page 
0

Вы можете использовать унарный оператор + тоже. +req.query.show

Смежные вопросы