Node.js Mongoose更新具有空值的字段引发异常

Node.js Mongoose更新具有空值的字段引发异常,node.js,mongoose,Node.js,Mongoose,以下是模型定义: pricing: { type: Number, default: null } 这是当Mongoose试图更新源数据为null的记录时出现的异常: 我收到的错误消息: message: 'Cast to number failed for value "NaN" at path "pricing"', name: 'CastError', type: 'number', value: NaN, path: 'pricing' 对于

以下是模型定义:

pricing: { type: Number, default: null }
这是当Mongoose试图更新源数据为null的记录时出现的异常:

我收到的错误消息:

  message: 'Cast to number failed for value "NaN" at path "pricing"',
     name: 'CastError',
     type: 'number',
    value: NaN,
     path: 'pricing'
对于这种情况,我确实需要使用null更新现有值,因为应用程序将该字段视为可为null的数字字段


如何修复它?提前谢谢

我的猜测是,它试图将null转换为一个数字。尝试将默认值设置为0

为定价插入空值对我来说似乎没问题;请参见下面我使用的示例代码:

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);
                }
            });
        });
    }
});

这个孤立的更新似乎对我有用。对不起,我帮不上什么忙了://p>NaN!=null是描述问题的最佳方式。 您应该检查您试图为“NaN”插入的价格值。
如果此测试为true,则在文档中插入null,否则将正确解析的定价作为数字插入。

谢谢。我试过了。它不起作用。我更新了收到的错误消息。谢谢您的回复。插入是正常的,但不是更新。我使用findOne获取文档并将其中一个字段指定为null,然后调用save。我收到了那个错误消息。我认为这不再是Mongoose和MongoDB 2.6的问题。我不确定它是什么时候修复的,但我测试了model.create和schema.default,分别为null值和doc.save,并正确插入它们并找到该null值。