【问题标题】:Sequalize, findall query, how do you return array in specific order?Sequelize,findall查询,如何按特定顺序返回数组?
【发布时间】:2017-04-13 03:27:04
【问题描述】:

到目前为止,在客户端,它从数据库接收一组记录标签。下面的代码是与 Sequelize 一起调用所有记录标签的查询。

我确实收到了一个按名称(字符串)顺序排列的数组,但是

数组区分大小写,因此如果名称为大写,则将在数组的开头。我将举例说明它的输出:

目前:

一个

B

C

D

一个

b

c

d

但我试图让它像这样返回

一个

一个

B

b

C

c

D

d

如果一切都失败了,我会在客户端做一些逻辑,但任何建议都将不胜感激。

router.get('/', function (req, res) {
  RecordLabel.findAll({
    order: ('name').toUpperCase()
  })
  .then(function (recordLabels) {
    return res.json(recordLabels)
  })
  .catch(function (err) {
    return res.json({ error: err})
  })
})

【问题讨论】:

    标签: javascript database postgresql sequelize.js


    【解决方案1】:

    这个顺序问题不是来自 sequelize 而是来自 postgresql。在某些配置中,即使按主键或 id,poststgresql 也不会排序。如果您有特权,更改数据库区域设置可以为您工作。

    查询生成输出表后(选择列表生成 已处理)它可以选择排序。如果没有选择排序, 这些行将以未指定的顺序返回。中的实际顺序 这种情况将取决于扫描和加入计划类型和顺序 磁盘,但不能依赖它。特定的输出排序可以 只有在明确选择排序步骤时才能保证。

    看看这个答案:link

    【讨论】:

      【解决方案2】:

      使用这个:

      router.get('/', function (req, res) {
      var sequelize=require('sequelize')
      RecordLabel.findAll({
        order:[sequelize.fn('lower', sequelize.col('name'))]
      })
      .then(function (recordLabels) {
         return res.json(recordLabels)
      })
      .catch(function (err) {
        return res.json({ error: err})
        })
      })
      

      【讨论】:

      • TypeError: sequelize.col is not a function at recordLabel.js:35:44 at Layer.handle [as handle_request]
      • @KaiKeanaaina 你的续集是什么版本?
      • 我已经在最新版本中对其进行了测试,它的返回正确排序为你想要的
      猜你喜欢
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      相关资源
      最近更新 更多