如何向猫鼬模式添加新密钥?

时间:2018-11-09 02:13:20

标签: javascript mongodb mongoose mlab

我最近开始为我的高级项目开发一个应用程序,该应用程序要求我使用某种类型的数据库。为此,我决定选择Mongoose,因为它是noSQL,并且比较容易上手。

所以,快进,我遇到了一个问题,我无法弄清楚如何编辑已经存在的模式并向其中添加新的键。

例如,我有一个表示代表以下内容的帖子(如Tweets或Facebook帖子):

  • 包含帖子正文的字符串
  • 创建帖子的用户的ID
  • 帖子创建的日期

我的代码是:

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 :(得分:0)

只需使用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方法,通常的建议是使用Mixed Type及其附带的所有优点和缺点。