【问题标题】:How can I construct this MongoDB sort query properly?如何正确构建此 MongoDB 排序查询?
【发布时间】:2019-06-13 06:52:27
【问题描述】:

在将数据传递给 Mongo 之前,我正在尝试在后端构建一个 mongo 排序查询。代码中req.query.so为排序类型(如name或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} 我正在创建一个字符串,而不是一个对象,但我不确定这一点。请告诉我如何解决这个问题。

【问题讨论】:

    标签: javascript mongodb bson


    【解决方案1】:

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

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

    但是如果你把它创建为一个对象var sort = {} 并添加它应该工作的参数

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多