Как добавить новые ключи в схему Mongoose? - PullRequest
0 голосов
/ 09 ноября 2018

Я недавно начал разрабатывать приложение для своего старшего проекта, которое требует от меня использования некоторого типа базы данных. Для этого я решил пойти с Mongoose, потому что это noSQL, и его немного легче подобрать.

Итак, перенесемся вперед, и я столкнусь с проблемой, когда не могу понять, как отредактировать уже существующую схему и добавить в нее новые ключи.

Например, у меня есть эта схема, которая представляет пост (например, твиты или посты в Facebook), который содержит:

  • Строка, которая содержит тело сообщения
  • Идентификатор пользователя, создавшего сообщение
  • Дата создания сообщения

Мой код для этого:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const PostsSchema = new Schema({
  Value: {
    type: String,
    required: true
  },
  User: {
    type: Schema.Types.ObjectId,
    ref:'users'
  },
  Date: {
    type: Date,
    default: Date.now
  }
});

// Create collection and add schema
mongoose.model('posts', PostsSchema, 'posts');

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

PostsSchema.add({Private: { default: false}});

Это означает, что теперь схема в базе данных будет выглядеть примерно так:

{
    "_id": {
        "$oid": "1831g98af21n9s5u7s9ccchj5"
    },
    "Value": "Beautiful day outside, can't wait to go jogging!",
    "User": {
        "$oid": "9a79ab143lbk9lk55wq327oi3226m"
    },
    "Date": {
        "$date": "2018-10-29T01:28:44.408Z"
    },
    "Private":  "false"
    "__v": 0
}

Итак, вернемся к моему вопросу, есть ли способ сделать это? Или, если у вас есть ссылка на документацию таких методов, я был бы очень признателен. Большое спасибо!

1 Ответ

0 голосов
/ 09 ноября 2018

Просто добавьте поле в схему с помощью default:

const PostsSchema = new Schema({
  Value: {
    type: String,
    required: true
  },
  User: {
    type: Schema.Types.ObjectId,
    ref:'users'
  },
  Date: {
    type: Date,
    default: Date.now
  },
  Private: {type: Boolean, default: 'false'}
});

Поскольку у вас есть default, у любой новой записи будет его, а также у любого нового экземпляра старой модели, сохраненной перед добавлением поля private.

Если вам действительно нужно больше подхода dynamic, обычная рекомендация - использовать Смешанный тип со всеми плюсами и минусами, которые появятсяс этим.

...