mongo_orm集合的自定义名称

mongo_orm将通过使用模块和类的名称,并附加一个 "s "来自动确定你的集合的名称。

在你想命名你的收藏的情况下,你可以简单地这样做。

class PapiTest < Mongo::ORM::Document
     collection_name "Buster"
     现场测试:字符串
结束

得到"/"做
     pt = PapiTest.new
     pt.test = "我想要你的性"
     pt.save!
   "你好,世界!"
结束

Kemal.run

在我的例子中,这个集合将被称为 拔河.

在内部,这是由一个宏来实现的,它看起来像这样。

#指定要使用的集合名称,否则它将使用模型的名称。

macro collection_name(name)

    {% SETTINGS[:collection_name] = name.id %}。

结束

重要的是要明白,这里的开发是在宏的上下文中进行的!因此,.id不是你必须传入的类变量/方法,而是宏上下文中的一个特殊函数,它将为字符串内容返回一个宏ID。因此,.id不是一个你必须传入的类变量/方法,而是宏上下文中的一个特殊函数,它将为字符串的内容返回一个MacroID。

请参考本文件。 https://crystal-lang.org/api/0.27.2/Crystal/Macros/MacroId.html

belongs_to是以类似的方式实现的。它允许你创建文档/集合之间的关系。

belongs_to :user, class_name: FictitiousModule::FictiticiousClass

在内部实现为一个宏。

macro belongs_to(model_name, class_name=nil)。

  field {{class_name ? class_name.id.underscore.gsub(/::/, "_") : model_name.id}}_id : BSON::ObjectId

  (...)

这里class_name:在原始的宏调用中指的是第二个变量,默认为nil。该宏检查它是否为nil,并选择使用什么。