gpt4 book ai didi

javascript - 在 Mongoose 中保存嵌套对象尚未通过验证

转载 作者:行者123 更新时间:2023-12-03 04:48:25 27 4
gpt4 key购买 nike

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

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

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

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

我的 Mongoose 架构是:

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

我可以将属性保存到 histGate 一次,当我 checkin 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 具有带有“4”和“5”属性的 histGate。然而,当我查看 Mongo 数据库时,它没有,它只有“4”属性。当我查询时,它只有“4”属性。

所以 Mongoose 告诉我一切都很好,而且它已经保存了,但实际上还没有。这是怎么回事?我的架构错误吗?

编辑

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

编辑

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

编辑

看起来你可以拥有动态键,例如创建 mongoose 文档时可以使用“4”、“5”等,但您无法编辑它们或添加更多内容。完全令人困惑。

最佳答案

问题详细here

修复:

gateDb.markModified('histGates');

保存之前。

关于javascript - 在 Mongoose 中保存嵌套对象尚未通过验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42767184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com