我认为 arangodb 是目前最好的 nosql 数据库,而 foxx 微服务是一个很好的资源。唉,3.xxx 版本附带的相关文档只能帮助构建一个简约的服务。此外,您可以在 arangodb 商店中找到许多应用程序作为示例,这些应用程序都是使用已弃用的工具(例如控制器、存储库)开发的。虽然 Web 界面中可用的向导很容易允许创建新服务,但我不明白为什么必须创建一个以挂载点为前缀的新集合。因此,一个完整的 REST API 生成了一个很棒的文档,但是除非我更改已经存在的集合的名称,否则它绝对没用。这是为什么 ???
1 回答
该生成器旨在作为快速样板生成器,让您更轻松地构建原型。在实践中,这对于实际项目来说并不是一个很好的起点(尤其是如果您已经手动创建了集合),但如果您只是快速需要一个 REST API,您可以使用自己的逻辑进行扩展,它会派上用场。
当您阅读文档时,我确定您已遵循此入门指南:https ://docs.arangodb.com/3/Manual/Foxx/GettingStarted.html
其中,前缀与非前缀集合名称的推理如下:
因为我们已经硬编码了集合名称,所以在同一个数据库中并排安装的多个服务副本将共享同一个集合。因为这可能并不总是您想要的,Foxx 上下文还提供了
collectionName
将安装点特定前缀应用于任何给定集合名称以使其对服务唯一的方法。它还提供了 collection 方法,它的行为几乎完全一样,db._collection
只是它还在查找集合之前应用了前缀。
在技术方面,该方法的文档进一步Context#collection
指定了该方法的作用:
将给定名称传递给collectionName,然后查找带有前缀名称的集合。
的文档Context#collectionName
:
使用此服务的collectionPrefix为给定名称添加前缀。
最后Context#collectionPrefix
:
collection和collectionName将使用的前缀来派生特定于服务的集合的名称。这是从服务的挂载点派生的,例如
/my-foxx
becomemy_foxx
。
所以,是的,如果您只想使用所有服务共享的集合,那么无前缀版本(db
直接使用对象)是可行的方法。但这通常会鼓励不同服务之间的紧密耦合,从而破坏将它们作为单独服务的目的,并且当您需要同一服务的多个实例但不希望它们共享数据时会出现问题,因此大多数示例都鼓励您改为使用该module.context.collection
方法。