Поле UUID в MongoDB с использованием Rails и mongoid

#ruby-on-rails #mongodb #mongoid

#ruby-on-rails #mongodb #mongoid

Вопрос:

Мне нужно поле uuid. Я знаю, что Mongo имеет встроенную поддержку UUID и функцию UUID. Что я хочу что-то вроде этого

 field :uuid, type: String, default: 'UUID()'
 

Конечно, в этом случае это будет просто строка ‘UUID ()’.

Есть ли способ действительно выполнить эту функцию при создании записи? В ActiveRecord есть аналогичная функциональность.

Ответ №1:

Попробуйте before_save:

 class MyModel
  include Mongoid::Document
  before_save :generate_uuid  
  field :uuid,  type: String  
 
  def generate_uuid
    code_to_generate_uuid
  end
 end
 

BSON ::ObjectId в значительной степени является UUID, хотя это может быть излишним

Комментарии:

1. Здесь uuid сгенерирован на уровне ruby, вопрос был на уровне native (mongodb)

2. Похоже, что Mongoid не поддерживает это из коробки. Существует mongoid-uuid драгоценный камень, который вы могли бы установить, чтобы предоставить вам .uuid метод, который вы могли бы вызвать в методе before_save .

3. Если вопрос касается генерации uuid на сервере MongoDB, вы должны написать это. Прямо сейчас ответ отвечает на вопрос по мере написания вопроса.