首页 > 解决方案 > 在环回3中基于特定过滤器计算大数据

问题描述

我有一个模型 A,它有 3 个字段 {“name”:Name,“creationDate”:Date,“completionDate”:Date},我想获取完成日期小于今天的所有数据的计数。

我曾尝试使用 Model.find(query) 进行过滤,但需要花费大量时间 loopback3 中有什么有效的方法吗?

标签: node.jsloopbackjs

解决方案


您是否使用了计数查询?喜欢:

YourModel.count({ 'completionDate' {'lt': yourDate} }, function (err, count) {
    if (!err)
         console.log(count);
});

如果查询仍然太长,请尝试在 中添加索引/common/models/yourModel.json,例如:

{
  "name": "YourModel",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "completionDate": {
      "type": "Date",
      "index": true
    }
...
}

并且不要忘记在 中添加一个自动更新启动脚本文件/server/boot/autoupdate.js,其中包含:

'use strict';

var Promise = require('bluebird');

module.exports = function (server) {

    Promise.each(server.models(), function (model) {

        if (model.dataSource) {
            var autoupdate = Promise.promisify(model.dataSource.autoupdate);
            if (autoupdate) {
                return autoupdate.call(model.dataSource, model.modelName);
            }
        }
    });
};

确保您的索引在您的数据库中更新!


推荐阅读