2017-03-13 30 views
0

我看到了与猫鼬非常不寻常的东西。我使用v4.8.1。保存在Mongoose中的嵌套对象不工作,但尚未通过验证

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

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

所以histGate将有物业“4”,“5”,“7”和值将是对象。

我的猫鼬架构是:

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

我还能再救一个属性histGate一次,当我在蒙戈检查我看到:

'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; 
    }); 

它告诉我它已经保存。 gateDbhistGate具有“4”和“5”属性。然而,当我看着Mongo数据库时,它并没有,它只有'4'属性。当我查询时,它只有'4'属性。

所以猫鼬告诉我一切都很好,并且它已经保存了,但实际上并没有。这是怎么回事?我的模式错了吗?

编辑

如果我编辑一个属性,它是一个字符串,它的工作原理。如果我编辑属性是一个对象,它的工作原理。当我编辑包含嵌套对象的属性,它不工作

编辑

它看起来像这样的架构心不是可能与猫鼬和蒙戈,它必须是一个数组

编辑

看起来你可以拥有动态密钥,例如'4','5'等创建一个猫鼬文档时,但你不能编辑或添加更多。完全莫名其妙。

回答

0

问题详述here

修正了:

gateDb.markModified('histGates'); 

保存之前。