如何正确构造此MongoDB排序查询?

时间:2019-06-12 21:06:27

标签: javascript mongodb bson

我正在尝试在将数据传递给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},我正在创建一个字符串,而不是对象,但是我不确定。请为我提供解决方法的建议。

1 个答案:

答案 0 :(得分:0)

替换语法很好,您可以在错误消息中看到得到name1。问题在于,您正在使用反引号sort` `创建为字符串。

`{${req.query.so}: ${req.query.sd}}` => "{name: 1}"

但是,如果您将其创建为对象var sort = {} 并添加它应该工作的参数

sort[`${one}`] = `${two}` => {name: "1"}