如何使用 Loopback 3 和 mongo 创建索引

问题描述

我有一个模型定义(为了可读性而剪掉了):

{
  "name": "PlannerArchive","base": "PersistedModel","idInjection": true,"options": {
    "validateUpsert": true,"strictObjectIDCoercion": true
  },"properties": {
    "planner": {
      "type": "object","required": true
    },"event": {
      "type": "string","user": {
      "type": "string","required": true
    }
  },"indexes": {                    <<<<<<<<<<<<<<<<<<<<<<<<
    "event_idx": {
      "keys": {
        "event": 1
      }
    },"user_idx": {
      "keys": {
        "user": 1
      }
    }
  }
}

我的期望是当服务器启动并创建集合时 - 索引也被创建。

实际情况是创建了集合,并创建了生成的“id”上的 PK 索引 - 但我的自定义索引都没有。

我可以在服务器启动时运行类似于 mongoDS.autoupdate()代码来创建它们,但我希望不需要这样做。

我对环回索引处理的理解是否有缺陷 - 或者我还能做些什么?

抱歉仍在运行 Loopback 3.x - 迁移正在进行中。

解决方法

添加索引时,您需要一个自动更新脚本。

将其添加到 /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);
            }
        }
    });
};

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...