更新mongoose模式后,新输入的字段未插入已创建的集合中

时间:2017-05-11 07:20:26

标签: node.js mongodb mongoose mongoose-schema

我已经使用mongoose架构中的mongoose架构创建了一个MongoDB集合,有些日子我在mongoose表中找到了一个新字段的要求,因此在mongoose架构中添加了该字段并尝试插入新添加的字段的值以及现有字段但不会插入新添加的文档中。

所以我作为一个故障排除过程,我完全删除了我现有的集合,然后将我的新文档插入一个集合中,然后我发现它开始正常工作。我新插入的字段被插入到集合中。那么有没有其他方法可以使用mongoose在MongoDB中添加新字段而不删除整个集合。

我现有的用户集合架构:

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

var userSchema = new Schema({
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});

var User = mongoose.model('User', userSchema);

module.exports = User;

当我使用用户名和密码插入新文档时在上面的集合中它工作正常。

添加新字段(名称)后的新用户集合架构:

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

var userSchema = new Schema({
  name: String,
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});

var User = mongoose.model('User', userSchema);

module.exports = User;

但更新我的用户架构后当我插入一个名称,用户名和密码的新文档时在上面的集合中只插入用户名和密码,名称字段不会插入。

2 个答案:

答案 0 :(得分:1)

只需执行一个简单步骤,即可为您创建的每个字段添加默认值。 实施例

var userSchema = new Schema({
  name: {type: String , default: ""},
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});

快乐编码

答案 1 :(得分:0)

名称也应该是架构中的对象,如此

var userSchema = new Schema({
  name: {type: String},
  username: { type: String, required: true, unique: true },
  password: { type: String, required: true },
});