Я пытаюсь создать запрос сортировки монго в конце перед передачей данных в монго. В коде req.query.so — это тип сортировки (например, имя или идентификатор), а req.query.sd — направление сортировки (1 по возрастанию и -1 по убыванию).
Это код, который вызывает ошибку:
exports.indexWithStatus = function (req, res) {
// sort
let sort = null
if (req.query.so && req.query.sd) {
sort = `{${req.query.so}: ${req.query.sd}}` // not being constructed
correctly
}
Ошибка, которую я получаю:
name: 'MongoError',
message:
'Failed to parse: sort: "{name: 1}". \'sort\' field must be of BSON type object.',
ok: 0,
errmsg:
'Failed to parse: sort: "{name: 1}". \'sort\' field must be of BSON type
object.',
code: 9,
codeName: 'FailedToParse' }
Я не очень хорошо знаком с Mongo, и большинство вопросов, которые я нашел в Интернете об этой ошибке, исходят от людей, которые пытались передать массив, а не объект, в .sort().
Я думаю, проблема в том, что, используя синтаксис замены ${req.query.so}, я создаю строку, а не объект, но я не уверен в этом. Пожалуйста, посоветуйте мне, как это исправить.
Синтаксис замены в порядке, вы можете видеть в сообщении об ошибке, что вы получаете name
и 1
. Проблема в том, что вы создаете sort
как строку, используя обратные галочки ` `
.
`{${req.query.so}: ${req.query.sd}}`
=> "{name: 1}"
Но если вы создадите его как объект var sort = {}
и добавьте параметры, они должны работать
sort[`${one}`] = `${two}`
=> {name: "1"}