2013-10-27 3 views
1

Я ищу эквивалент виртуальных объектов для существующих свойств. Я хотел бы изменить значение для существующего свойства схемы, когда я его вызываю (например, теги полосы или что-то еще). В настоящее время я использую виртуальное имя с другим именем для достижения этого. Очевидно, Mongoose ломается, когда виртуальное имеет то же имя, что и существующие свойства. Кажется, что нет фильтров pre/post fetch - предложений?Фильтр свойств Mongoose

ответ

2

Предполагая, что вы хотите сказать, что у вас есть другой «внешний» формат, чем внутренне хранятся ...

Там нет никакого способа, чтобы полностью перекрыть получить/установить в 100% последовательным образом, не углубляясь глубоко в внутренности Мангуста. Я недавно изучил это, и это глубокая темная дыра. :(

У вас есть несколько разумных вариантов:.

  1. Виртуальный подход собственности Вы могли бы иметь свойство на самом деле под названием _color, а затем выставить его как color, например, вместо того, чтобы перегружать то же значение. Тогда было бы ясно (возможно, по соглашению), что значения префиксов подчеркивания «только для внутреннего использования».
  2. Добавить функцию для получения/установки значения (путем добавления функции к схеме). Мне нравится этот, поскольку вы могли бы добавить функцию под названием toColorString или что-то в этом роде, чтобы было ясно, когда/как ее использовать.

Если вы используете виртуальные/скрытые свойства, это делает запрос к документу несколько более запутанным, поскольку свойство не подвергается ни одному имени, ни точно так же, как данные будут запрашиваться. Поэтому я бы немного наклонился на использование пользовательских функций, если это возможно, для извлечения пользовательских форматированных версий данного свойства/поля.

+0

Ya - это то, что я нашел. Я в порядке с виртуальными - привык к их причудам. Просто надеялся на автоматическую предварительную обработку на выборке, как и на сохранение. – cyberwombat

+0

Дело в том, что вы действительно не хотите менять данные при загрузке. Вы только хотите, чтобы его внешний вид изменился. Это другое. Вы действительно хотите сохранить «сырые» данные. – WiredPrairie

+0

Да, я согласен - моя текущая ситуация в том, что мне нужно изменить некоторые данные - все дело в том, что мы использовали ее во многих местах. Поэтому я могу либо изменить его повсюду (например, добавить фильтрацию), либо разобраться с ним один раз, как хотелось бы. – cyberwombat

Смежные вопросы