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

Posted

技术标签:

【中文标题】更新猫鼬模式后,新输入的字段未插入已创建的集合中【英文标题】:Newly entered field does not inserted in already created collection after updating mongoose schema 【发布时间】:2017-10-10 01:47:38 【问题描述】:

我已经使用来自 express Web 服务的 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;

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

【问题讨论】:

【参考方案1】:

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

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

快乐编码

【讨论】:

【参考方案2】:

名称也应该是架构中的对象,像这样

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

【讨论】:

没关系,你如何定义你的领域。

以上是关于更新猫鼬模式后,新输入的字段未插入已创建的集合中的主要内容,如果未能解决你的问题,请参考以下文章

mongodb与猫鼬的一对一关系

猫鼬只更新不为空的字段?

使用猫鼬时间戳选项不会创建属性

在猫鼬中更新它们时如何访问每个文档字段[重复]

如何允许猫鼬模式中的枚举字段为空?

猫鼬模型密钥未插入 Postman 发布请求中