javascript - 如何使 Mongoose 不将空数组或对象字段插入文档中

标签 javascript node.js mongodb mongoose

假设我们的 Node.js 项目中有一个 Mongoose 架构:

let coolSchema = new mongoose.Schema({
  field_1 : Number,
  field_2 : String,
  field_3 : [ String ],
});

让我们有一个相应的对象:

var data = {
  field_1 : 123,
  field_2 : 'blah',
  field_3 : ['aa', 'bb'],
};

现在要将这些数据保存到 MongoDB 中,我们可以使用以下代码:

let Model = require('mongoose').model('CoolModel', coolSchema);
(new Model(data)).save();

好吧,虽然一切都很酷。

但是,如果data不包含field_3(数组字段,对于对象字段也是如此)Mongoose无论如何都会将此字段添加到正在创建的文档中,并具有空值。

如果data对象中不包含该字段,我们能否以某种方式告诉Mongoose不要创建该字段?

最佳答案

您可以轻松地跳过数组字段和对象字段数组。这将让您跳过在新文档中保存空数组。但您必须为此使用 pre hook 。

var brandSchema = new Schema({
    name : {type:String},
    email:String,
    check:[]
})

brandSchema.pre('save', function (next) {
  if (this.isNew && 0 === this.check.length) {
    this.check = undefined;                                                                                                                                   
  }
  next();
})

当新文档插入到您的模式中时,您必须使用这个 middlware。这工作正常,所以试试这个。 这是当我们想要插入任何文档时的响应

"data": {
    "__v": 0,
    "name": "testing",
    "email": "testing@gmail.com",
    "_id": "5915b018e292833edda8837f"
  }

所以我只发送电子邮件和姓名,但跳过检查(数组)字段(不发送任何值)。

关于javascript - 如何使 Mongoose 不将空数组或对象字段插入文档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43934652/

相关文章:

angularjs - 如何从 mongodb 中查找选择不同的值

mongodb - go mongo 驱动程序更新无法将对象数组设置为 null

javascript - ng-show 和 ng-hide 不起作用

javascript - 在 CONNECT 平台中控制输出/信号队列?

javascript - Meteor:如何获取 useraccounts 包将新的用户文档写入远程集合​​?

javascript - Nodejs 需要带有初始值设定项的类

node.js - 连接上游时出错。 Docker 撰写,NodeJS,Nginx

javascript - jQuery 中如何防止连续点击按钮?

javascript - 'Enter key' 不会在 Firefox 中提交表单,但在 Chrome 中会,为什么?

javascript - 如何使用 moment.js 和 ES6 创建小时 + 分钟数组?