【问题标题】:Saving nested objects in Mongoose not working yet passing validation在 Mongoose 中保存嵌套对象尚未通过验证
【发布时间】:2017-08-03 16:17:26
【问题描述】:

我在 Mongoose 中看到了一些非常不寻常的东西。我正在使用 v4.8.1。

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

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

所以histGate 将具有属性“4”、“5”、“7”并且值将是对象。

我的 Mongoose 架构是:

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 具有 histGate 和 '4' 和 '5' 属性。然而,当我查看 Mongo 数据库时,它没有,它只有“4”属性。当我查询时,它只有“4”属性。

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

编辑

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

编辑

看起来这个模式在 mongoose 和 mongo 中是不可能的,它必须是一个数组

编辑

看起来您可以拥有动态键,例如'4'、'5' 等在创建 mongoose 文档时,但您不能编辑它们或添加更多。完全莫名其妙。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    问题详细here

    固定为:

    gateDb.markModified('histGates');
    

    保存前。

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2021-08-13
      • 2016-11-17
      • 1970-01-01
      相关资源
      最近更新 更多