MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Conselhos sobre como migrar do MongoMapper para o Mongoid?


Ambas são ótimas bibliotecas MongoDB para Ruby. Mas se você quiser mudar, aqui estão algumas notas:

Migrando MongoMapper ORM para Mongoid ORM - Notas

  • Configure a conexão com o banco de dados.

  • Substitua o arquivo yaml de configuração (inclui configuração de réplica).

  • Configure as opções específicas do Mongoid. por exemplo - raise_not_found_error: false . se você não quiser um erro toda vez que uma consulta não retornar nada ...

  • Alterar todas as definições de modelos - include MongoMapper::Document para include Mongoid::Document

  • Altere o formato de todas as definições de campos.

  • Em mongoid, você deve especificar o timestamp:include Mongoid::Timestamps

  • Validação de alterações. por exemplo::in => ARRAY , será:validates :name, presence: true, inclusion: { in: ARRAY }

  • Alterar índices.

  • Altere o formato order_by. por exemplo:MM:Model.all(:order => 'name') . Mongoide:Model.order_by('name ASC')

  • Error é uma palavra-chave em Mongoid. Então, se você tem um modelo chamado Error , você deve alterá-lo.

  • O formato de paginação é diferente, usando outra gema.

  • A entrada de índice de chave primária em MM é id . No Mongoid é _id , se você tiver outro código baseado em .id no objeto JSON, você pode substituir as_json função em seu modelo para criar a estrutura JSON desejada.

  • No MM, Model.fields(:id, :name) ,limita os campos retornados do banco de dados àqueles fornecidos ao método. No Mongoid é Model.only(:name,:id)

  • Algumas consultas mudam:

    1. Selecionando objetos por array:MM:Model.where(:attr.in => [ ] ) e Model.where(:attr => [ ] ) . Mongoid é apenas:Model.where(:attr.in => [ ] )

    2. A opção de mapa do MM é equivalente à arrancada do Mid. Model.map(&:name) --to-- Model.pluck(:name)

    3. O Mongoid não oferece suporte à consulta de localização para nil. por exemplo:value = nil. Model.find(value) lançará um erro:"Calling Document .find with nil is invalid" . Então no mongoid devemos fazer:Model.find(value || "") .

    4. No MM:Model.find_or_initialize_by_name("BOB") . Em Mongoid Model.find_or_initialize_by(name: "BOB") .

    5. MM pode ser usado nessas duas opções:Model.where({:name => 'BOB'}).first , e também Model.first({:name => 'BOB'}) . Mongoid tem apenas a primeira opção.

    6. No MM, para atualizar vários objetos:Model.set({conditions},attr_to_update) . Em Mongoid:Model.where(conditions).update_all(attr_to_update) .