我正在尝试在将数据传递给Mongo之前在后端构造mongo排序查询。在代码中,req.query.so是排序类型(例如名称或id),而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},我正在创建一个字符串,而不是对象,但是我不确定。请为我提供解决方法的建议。
答案 0 :(得分:0)
替换语法很好,您可以在错误消息中看到得到name
和1
。问题在于,您正在使用反引号sort
将` `
创建为字符串。
`{${req.query.so}: ${req.query.sd}}`
=> "{name: 1}"
但是,如果您将其创建为对象var sort = {}
并添加它应该工作的参数
sort[`${one}`] = `${two}`
=> {name: "1"}