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