【发布时间】: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