【问题标题】:Mongoose not enforcing type specified in schemaMongoose 不执行模式中指定的类型
【发布时间】:2017-06-26 07:51:50
【问题描述】:

我创建了一个成功保存到 Mongo 集合的 Mongoose“成本”对象。在 Costs 对象的 Mongoose 模式中,我为每一列指定了类型:

'use strict';

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

var CostsSchema = new Schema({

    property_hash:String,

    month: Number,

    year: Number,

    spend: Number,

    updated_by: String,

    channel: String,

    source: String,

    updated: Date
});

mongoose.model('Costs', CostsSchema);

但是当我调用 Costs.collection.insert() 并传递一个对象数组并将所有属性设置为字符串时,它们会毫无错误地保存到 Mongo。

成功保存的无效对象示例:

{ channel: "websites",
month: "I should be an integer",
property_hash: "1234566",
source: "trade",
spend: "I am an invalid integer",
updated: "I am an invalid date",
updated_by: "fred",
year: "Invalid year" }

【问题讨论】:

标签: node.js mongodb mongoose mongoose-schema


【解决方案1】:

如果您查看docs,您会发现这不是在 Mongoose 中实现的方法,而是在 MongoDB 驱动程序中实现的,因此根本不会发生验证 - 文档直接保存到 Mongo。

根据您的需要,您最好使用#insertMany 方法。

【讨论】:

  • 即使您使用 Mongoose 方法,您仍然可能会摔倒 - 如果您在模式中有一个类型 String 属性并且您尝试将 Number 保存到其中,它不会失败,它会将其转换为字符串(可能不是您所期望或希望的)。看看这个例子:stackoverflow.com/questions/47464220/…
猜你喜欢
  • 2018-12-11
  • 2014-05-21
  • 2019-02-03
  • 1970-01-01
  • 2021-10-17
  • 2020-11-15
  • 2019-01-13
  • 1970-01-01
  • 2013-02-09
相关资源
最近更新 更多