【问题标题】:How to define an index in ArangoDB FOXX?如何在 ArangoDB FOXX 中定义索引?
【发布时间】:2016-03-18 17:15:33
【问题描述】:

FOXX 应用程序可以自动创建索引吗?我有一个集合(模型),我需要一个字段用作性能的唯一索引。我可以在事后创建散列,但我只是想确保它不可用模型定义。如果是这样,我在哪里可以找到文档?

第二个问题是如何在 FOXX 中创建索引?我知道如何在 arangojs 中做到这一点,但我似乎无法在 FOXX 文档中找到它。划掉这个问题。我想通了:db.collection.createIndex()。但是男孩是隐藏在文档的“杂项”部分的深处。

【问题讨论】:

    标签: arangodb foxx


    【解决方案1】:

    索引 API 不是 Foxx API 的一部分,而是通用 ArangoDB API(Foxx 只是 ArangoDB 为构建和管理微服务提供的框架),可以在 ArangoDB 文档中找到:https://docs.arangodb.com/IndexHandling/WorkingWithIndexes.html

    'use strict';
    var myCollection = applicationContext.collection('my-data');
    myCollection.ensureIndex({type: 'hash', fields: ['a', 'b'], unique: true});
    

    在 ArangoDB 2.x 中,Foxx 提供了分别称为存储库和模型的集合和文档(即存储在这些集合中的数据集)的包装器。每个存储库代表一个集合,每个模型代表一个文档。 ArangoDB 3.0 将提供一个新的、简化的 API,通过鼓励您使用 ArangoDB 已经提供的底层集合 API 来消除这种额外的复杂性。

    为了在 Foxx 存储库上使用特定于索引的方法(例如对具有地理索引的集合的地理查询),您需要使用附加的 indexes 属性定义存储库,如下所示:

    'use strict';
    var Foxx = require('org/arangodb/foxx').Repository;
    var MyModel = Foxx.Model.extend({/* ... */});
    var MyRepo = Foxx.Repository.extend({
      indexes: [
        // same syntax as collection.ensureIndex:
        {type: 'hash', fields: ['a', 'b'], unique: true}
      ]
    });
    var repo = new MyRepo(applicationContext.collection('my-data'), {
      model: MyModel
    });
    

    当存储库被实例化(即调用new MyRepo(/* ... */))时,Foxx 将确保根据需要创建索引。

    请参阅https://docs.arangodb.com/Foxx/Develop/Repository.html#defining-indexes 上的文档。

    或者,如果您不想使用 Foxx 存储库,您可以在创建集合后使用上面的常规索引 API 在设置脚本中简单地定义索引。无论哪种方式,您都无需担心多次运行代码:如果索引已经存在,ensureIndex 将不会执行任何操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多