如何在ArangoDB FOXX中定义索引?

3
一个FOXX应用程序是否能自动创建索引?我有一个集合(模型),其中我需要使用一个字段作为唯一索引以提高性能。我可以在事后创建哈希,但我只是想确保它是否可在模型定义中使用。如果是这样的话,我该在哪里找到文档?
第二个问题是如何在FOXX中创建索引?我知道如何在arangojs中创建索引,但似乎在FOXX文档中找不到相关信息。请忽略这个问题。我已经解决了:db.collection.createIndex()。但是那真的被深深地隐藏在文档的“misc”部分中。
1个回答

4

索引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如果索引已存在,则不会执行任何操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接