爲價格插入空值似乎對我來說沒問題;看我下面使用的示例代碼:
app.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);
}
});
model.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);
}
});
});
}
});
此隔離更新似乎對工作我。對不起,我不能有更多的幫助:/
我不認爲這是Mongoose和MongoDB 2.6的問題。我不知道什麼時候修復了,但是我測試了'model.create()'爲空值,模式缺省值爲空值,'doc.save()'爲空值,並且它們都正確插入, find()'那個空值。 – Nucleon 2014-07-02 18:32:21