Сохранение и получение объектов JavaScript в / из MongoDB

я сейчас играю с node.js и MongoDB, используя драйвер node-mongo-native.

Я немного тестировал использование консоли Mongo для хранения и получения объектов JS. Я понял, что если я сохраню объект, содержащий функции / методы, методы и функции также будут храниться в коллекции. Это интересно, поскольку я думал, что функции не могут храниться в MongoDB (за исключением коллекции system.js, как было предложено в документах Mongo ).
Я немного протестировал использование консоли Mongo для хранения и получения объектов JS. Я понял, что если я ...

я сейчас играю с node.js и MongoDB, используя драйвер node-mongo-native.

Я немного тестировал использование консоли Mongo для хранения и получения объектов JS. Я понял, что если я сохраню объект, содержащий функции / методы, методы и функции также будут храниться в коллекции. Это интересно, поскольку я думал, что функции не могут храниться в MongoDB (за исключением коллекции system.js, как было предложено в документах Mongo ).
Я немного протестировал использование консоли Mongo для хранения и извлечения объектов JS. Я понял, что если я ...

я сейчас играю с node.js и MongoDB, используя драйвер node-mongo-native.

Я немного тестировал использование консоли Mongo для хранения и получения объектов JS. Я понял, что если я сохраню объект, содержащий функции / методы, методы и функции также будут храниться в коллекции. Это интересно, поскольку я думал, что функции не могут храниться в MongoDB (за исключением коллекции system.js, как было предложено в документах Mongo ).

Я немного тестировал использование консоли Mongo для хранения и получения объектов JS. Я понял, что если я сохраню объект, содержащий функции / методы, методы и функции также будут храниться в коллекции. Это интересно, поскольку я думал, что функции не могут храниться в MongoDB (за исключением коллекции system.js, как было предложено в документах Mongo ).

Я немного тестировал использование консоли Mongo для хранения и получения объектов JS. Я понял, что если я сохраню объект, содержащий функции / методы, методы и функции также будут храниться в коллекции. Это интересно, поскольку я думал, что функции не могут храниться в MongoDB (за исключением коллекции system.js, как было предложено в документах Mongo ).
Также он будет хранить не только методы, но и каждый метод и член всей цепочки прототипов объекта. Кроме того, мне не нравится такое поведение, и я считаю его нелогичным. Я не должен этого допускать.

Я собирался управлять пользователями в коллекции Mongo. Для этого у меня есть объект User, содержащий все методы пользователя, работающие как прототип для каждого экземпляра пользователя. Сам объект пользователя будет содержать только атрибуты пользователя.

Если я сохраню пользователя в коллекции Mongo, я хочу сохранить только собственные свойства объекта пользователя. Никаких членов-прототипов и тем более методов-прототипов. В настоящее время не вижу, как это чисто сделать. Возможные варианты, которые, как я полагал, могут сработать, следующие:

  1. создание неглубокой копии с помощью foreach и hasOwnProperty и сохранение этой копии в коллекции.
  2. Добавить атрибут данных для каждого пользователя, который содержит все атрибуты объекта и может быть сохранен в коллекции.
  3. Мне пришло в голову, что я написал следующее: Я мог бы также установить для всех свойств прототипов неперечислимость, должен предотвратить их сохранение в коллекции.

Однако у меня есть те же проблемы, но наоборот: при загрузке пользователя из коллекции. AFAIK нет возможности изменить прототип объекта в JavaScript после его создания. И также нет способа указать прототип, который будет использоваться, когда Mongo создает экземпляры объектов, полученных из коллекции. Так что в основном я всегда получаю объекты, которые наследуются от Object с помощью Mongo. Насколько я могу судить, с этого момента у меня есть 2 варианта восстановления пригодного для использования объекта пользователя:

  1. Создайте новый объект, наследующий от пользователя, и скопируйте каждый атрибут в объекте результата во вновь созданный объект. (Совместимость с механизмами хранения 1 и 3)
  2. Создайте новый объект, наследующий от пользователя и сохраняющий объект результата как атрибут данных для вновь созданного объекта. (Совместимо с механизмом хранения 2)

Верны ли мои предположения, особенно о возможности указать прототип для результатов запроса? Как правильно это сделать и почему? Я, конечно, не первый, кто пытается сохранить и воскресить объекты в / из MongoDB с помощью node.js.

В настоящее время я бы выбрал подход 2/2. Мне он не очень нравится, но он самый эффективный и единственный, который чисто работает с API. Однако я бы предпочел услышать, что на самом деле API не делает ничего плохого, но я делаю это за то, что не знаю, как правильно его использовать. Так что, пожалуйста, просветите меня :)

12
задан Benjamin 17 November 2013 в 21:05
поделиться