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