【问题标题】:Loopback: MySQL functions in order filterLoopback:按顺序过滤的 MySQL 函数
【发布时间】:2017-06-10 13:32:33
【问题描述】:

我想在 order filter 中使用 MySQL functions 和 Node API。

我现在需要的函数是FIELD

谢谢大家!

【问题讨论】:

    标签: loopbackjs strongloop


    【解决方案1】:

    到目前为止,Loopback ORM 不支持它(可能永远不会),但您始终可以直接使用 MySQL 驱动程序:

    var ids = [4,5,6,7]
    YourModel.dataSource.connector.query('SELECT * FROM something ORDER BY FIELD(id, ?)', ids, (err, results) => {
       //...
    });
    

    但如果你想成为数据库不可知论者,你可以用 Javascript 来实现:

    var ids = [4,5,6,7]
    SomethingModel.find().then(rows => {
      rows.sort(function (a, b) {
        return ids.indexOf(a) - ids.indexOf(b);
      });
      //...
    });
    

    或者对于更大的数组来说快一点(通过索引):

    var idList = [4,5,6,7];
    var idMap = {};
    idList.forEach(function (id, index) {
      idMap[id] = index;
    });
    SomethingModel.find().then(rows => {
      rows.sort(function (a, b) {
        return idMap[a] - idMap[b];
      });
      //...
    });
    

    如果您在代码中的许多地方执行此操作,您也可以生活得有点危险,并且猴子补丁 connector.buildOrderBy 可以在本机执行此操作。

    【讨论】:

    • 感谢您的回答,一个问题...当我使用原始 mysql 时,钩子会发生什么?我正在使用分页(+1M 行)我认为 javascript 解决方案不合适(我在 Lodash 中认为)
    • @rigobcastro 因为你很可能会在远程方法中调用connector.query,所以默认情况下不会调用任何钩子。您也可以在远程方法中执行此操作,但要运行挂钩:SomethingModel.notifyObserversOf('before save', context, err => { ... })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2013-05-17
    • 2021-12-23
    • 1970-01-01
    • 2019-04-25
    • 2021-04-20
    • 2011-12-31
    相关资源
    最近更新 更多