Подтвердить что ты не робот

Хранение объекта Json в файле Mandoose String

В моей схеме Mongoose у меня есть поле, которое является строкой, и я хочу иметь возможность хранить в нем объект JSON. Является ли это возможным? В Postgres можно хранить словарь в столбце строки.

Я хочу сделать это, потому что словарь (фактически JSON-объект в JS) является просто простым значением чтения и записи и не требует запросов, но также потому, что это всего лишь одно значение, а не массив значений.

4b9b3361

Ответ 1

Да, вы можете просто сохранить {myJsonProperty: JSON.stringify(myObject)}. Надеюсь, вы знаете, что вы также можете просто установить {myJsonProperty: Object} в свою схему мангуста и сохранить весь объект, не преобразовывая его в строку без причины. Он не должен быть вложенным документом со схемой, это может быть просто простой объект javascript.

Ответ 2

если вы можете изменить тип поля "String" на "Object", вы можете сохранить json как есть.

var schema_obj = new Schema({
field1: Object,
..
});

Ответ 3

Принятый ответ хорош для большинства ситуаций.

Однако, если у вас есть объект, который вы хотите сохранить, и у вас нет контроля над объектными ключами (например, они могут быть отправлены пользователем), вы можете захотеть сохранить их как стробированные JSON. Это позволяет вам преодолеть ограничение, наложенное MongoDB на то, что ключи не должны содержать зарезервированные символы $ или ..

Вы можете достичь этого, используя мангустовские геттеры и сеттеры, например:

data: {
  type: String,
  get: function(data) {
    try { 
      return JSON.parse(data);
    } catch() { 
      return data;
    }
  },
  set: function(data) {
    return JSON.stringify(data);
  }
}