保存Mongoose中的嵌套对象,但尚未通过验证

时间:2017-03-13 15:17:56

标签: javascript node.js mongodb mongoose

我看到Mongoose非常不寻常。我正在使用v4.8.1。

我有一个名为Gate的模式,它有一个名为histGate的属性。我想以以下格式保存数据:

histGate:{ 
    '4': 
        { 
            gateName: 'G1'
        },
    '5': 
        { 
            gateName: 'G5'
        } 
    },
    ...
    ...

因此histGate将具有属性'4','5','7',并且值将是对象。

我的Mongoose Schema是:

histGate: { 
    type: {
        "gateName": {type: String
    }
}

我可以将属性保存到histGate一次,当我签入Mongo时,我看到:

'4': 
    { 
        gateName: 'G1',
    },

然而,我尝试保存另一个属性:

    return Gate.findById(gateId)
    .then(function(gateDb){

        gateDb.histGate['5'] = gate;

        return gateDb.save()
        .then(function(gateDb){
            console.log('saved and gateDb is ', gateDb);
            return gateDb;
        })
        .catch(function(err){
            console.log('err is ', err);
            throw err;
        });
    })
    .catch(function(err){
        console.log('err is ', err);
        throw err;
    });

它告诉我它已经保存了。 gateDb的{​​{1}}具有'4'和'5'属性。然而,当我查看Mongo数据库时,它没有,它只有'4'属性。当我查询时,它只有'4'属性。

因此,Mongoose告诉我一切都很好,花花公子,它已经拯救了,但实际上并没有。这是怎么回事?我的架构错了吗?

修改

如果我编辑一个字符串属性,它就可以了。如果我编辑属于对象的属性,它就可以工作。当我编辑包含嵌套对象的属性时,它不起作用

修改

使用mongoose和mongo看起来这个架构是不可能的,它必须是一个数组

修改

看起来你可以拥有动态密钥,例如创建mongoose文档时,“4”,“5”等,但您无法编辑或添加更多文档。完全莫名其妙。

1 个答案:

答案 0 :(得分:1)

问题详述here

修正:

var width;
var height;



html2canvas($('#tablename'), {
       onrendered: function(canvas) {         
           var imgData = canvas.toDataURL(
               'image/png'); 

           var doc = new jsPDF('l', 'mm',"a4");
           doc.addImage(imgData, 'PNG', 11, 11,width,height);
           doc.save('tabelle.pdf');
       }
   });}

保存之前。