【问题标题】:Mongoose cant save model arrays猫鼬无法保存模型数组
【发布时间】:2016-06-29 23:37:27
【问题描述】:

我正在尝试这样做:

var hStatus = require('models/hStatus');

var log = new hLog();

    hStatus.find({_id: /^value_/}, function(err, data){
            if(!err){
                    log.h = data;
                    log.save(function(err){
                         if(err){
                            console.log(err);
                         }else{
                            console.log('ok!');
                         }
                    });
            }
    });

数据变量结构:

[ { outs: 
     [ [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object],
       [Object] ],
    c: 1457739456474,
    b: false,
    c: true,
    d: false },

我的模型是:

var hLog = new mongoose.Schema({
        a: Date,
        b: Number,
        c: String,
        d: String,
        e: Boolean,
        f: Boolean,
        g: String,
        h: [hStatus]
});

//this two same file
var hOuts = new mongoose.Schema({
        a: Number,
        b: String,
        c: Boolean,
        d: Boolean
});

var hStatus = new mongoose.Schema({
        a: String,
        b: Boolean,
        Outs: [hOuts],
        c: Number,
        d: Boolean   
});

但是保存函数返回:

ValidationError: CastError: Cast to Array failed for value at "{ Outs:

这是正确的做法吗?

我不确定我错过了什么。

【问题讨论】:

  • 在您的 hLog 模型中,将 h: [hStatus] 更改为 h: {} 并查看是否有效。不能解决问题,只是试试看。
  • 是的,保存好了。你能给我解释一下为什么吗?谢谢!!
  • 您的架构有错误。请看下面我的新答案
  • 不是,我只是把字段复制错了。

标签: node.js mongodb mongoose


【解决方案1】:

您在 hStatus 架构中有错误

c: Number,
d: Boolean   

在您的 json 数据中

...
c: true,
d: 'asd' 

类型不匹配

【讨论】:

  • 我刚刚复制错了,修正了编辑。模型中的 {} 仍然可以修复它。
【解决方案2】:

试试下面的

...
log.h = data;
log.markModified('h');
log.save(function(err){
                     if(err){
                        console.log(err);
                     }else{
                        console.log('ok!');
                     }
                });

【讨论】:

    【解决方案3】:

    试试 .push() 方法:

    var log = new hLog();
    
        hStatus.findOne({_id: /^value_/}, function(err, data){
                if(!err){
                        log.h.push(data);
                        log.save(function(err){
                             if(err){
                                console.log(err);
                             }else{
                                console.log('ok!');
                             }
                        });
                }
        });
    

    【讨论】:

    • 试过了,得到这个:TypeError: this._schema.caster.cast is not a function
    • 尝试使用 findOne(),它检索一个对象而不是 find() 检索对象数组
    猜你喜欢
    • 2020-09-05
    • 2014-05-27
    • 2016-01-21
    • 2014-11-07
    • 2015-05-03
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    相关资源
    最近更新 更多