为定价插入空值对我来说似乎没问题;请参阅下面我使用的示例代码:
应用程序.js
var mongoose = require("mongoose"),
Widget = require("./model.js").model;
// connect to mongo
mongoose.connect("mongodb://localhost/testdb");
// test insertion
var testValid = new Widget({ name: "Valid Test", price: 10.00 }),
testInvalid = new Widget({ name: "Invalid Test", price: null });
testValid.save();
testInvalid.save(function (err) {
if (err) {
console.log(err);
}
});
模型.js
var mongoose = require("mongoose");
var schema = new mongoose.Schema({
name: String,
price: { type: Number, default: null }
});
exports.model = mongoose.model("Widget", schema);
exports.schema = schema;
从您的错误消息来看,似乎正在进行无效计算,其结果是试图插入 Mongo。错误消息中的“值”是试图插入的值。您可以通过尝试保存以下文档来验证这一点:
var testInvalid = new Widget({ name: "Invalid Test", price: "abc"});
这将导致:
{ message: 'Cast to number failed for value "abc" at path "price"',
name: 'CastError',
type: 'number',
value: 'abc',
path: 'price' }
您是否可以分享更多详细信息或代码示例?
编辑:
我会尝试将更新与您的其余代码隔离开来,看看您是否可以复制错误,如下所示:
var mongoose = require("mongoose"),
Widget = require("./model.js").model;
// connect to mongo
mongoose.connect("mongodb://localhost/testdb");
// insert record
var testInvalid = new Widget({ name: "Invalid Test", price: 10.00 });
// update record
testInvalid.save(function (err) {
if (err) {
console.log(err);
} else {
Widget.findOne({ name: "Invalid Test" }, function (err, record) {
// set price to null & save
record.price = null;
record.save(function (err) {
if (err) {
console.log(err);
}
});
});
}
});
这个孤立的更新似乎对我有用。抱歉,我无法提供更多帮助:/