просмотреть документ в определенный момент времени? (дуп, версия?) - PullRequest
0 голосов
/ 22 марта 2012

Mongoid - 2.4.7

Мне нужно хранить копию документа в определенный момент времени.

  • Я буду знать точный момент времени
  • , они произойдут вручную (определяется как срок годности)
  • и произойдут только один или два разасрок действия документа.

Каков наилучший способ сделать это?

Отдельные модели - создавать отдельные модели с истекшим сроком действия и копировать записи, когда они«истекает»?Это кажется немного грубым, особенно если учесть, что родитель имеет встроенные документы, которые также имеют встроенные документы.

Управление версиями - Встроенное управление версиями Mongoid может работать, но мне не нуженверсия сохраняется при каждом обновлении, только в 1 или 2 конкретных момента времени.Поэтому мне нужно было бы иметь возможность вручную установить это.

(Кроме того, этот родительский документ фактически встроен сам по себе; однако, это может измениться, поскольку я знаю, что Mongoid :: Versioning этого не делаетработать со встроенными документами.)

Итак, как лучше всего просматривать документ (и его встроенные документы) в определенный момент времени?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Вам придется сделать это вручную. Я бы создал другой ключ в родительском документе с именем или prior_version или snapshot_version и сохранил копию там.

Вам необходимо проверить, как mongoid обрабатывает это назначение и, возможно, выполнить глубокое копирование вручную, поскольку у вас есть много встроенных полей / документов.

Я думаю, что отдельные модели излишни, и управление версиями не будет работать для этого приложения (как вы сказали, вам нужна только одна копия)

0 голосов
/ 24 августа 2012

Из документов Mongoid о версиях:

Вы можете пропустить управление версиями в любой момент времени, поместив постоянный вызов в блок без версии.

person.versionless do |doc|
  doc.update_attributes(name: "Theodore")
end

Это немного громоздко, но вы можете иметь оператор if, который переключается с версионного на версионный, когда вы этого хотите. То есть, большую часть времени сохраняйте без версии, но когда вы устанавливаете флаг, оператор if переключается на сохранение с сохранением версий.

...