Javascript Mongoose-保存时未过度覆盖数组值

Javascript Mongoose-保存时未过度覆盖数组值,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,有点绝望了。代码通过散列查找用户。在返回的模型上,我更改了一些值并保存它。所有属性在数据库中都会更改,但是parent.tree_data.total_children.level的数组项[0]保持不变,尽管在执行脚本时它在模型中会更改,但是在数据库中它不会更改。有什么想法吗 var parent = await utils.findUser(hash); //returns mongoose model ... code in between where I us

有点绝望了。代码通过散列查找用户。在返回的模型上,我更改了一些值并保存它。所有属性在数据库中都会更改,但是parent.tree_data.total_children.level的数组项[0]保持不变,尽管在执行脚本时它在模型中会更改,但是在数据库中它不会更改。有什么想法吗

      var parent = await utils.findUser(hash);   //returns mongoose model

      ... code in between where I use values from the parent doc ...

      //updating the parent doc via the model
      parent.tree_data.parent_tag = "dev";
      parent.tree_data.total_children.level[0]++;
      parent.tree_data.direct_children.push({share_hash: result.share_hash, nicname: result.nicname});
      parent.val = parent.val + 0.4;

      parent.save(function(err){
        if (err){
          console.log(err);
        }
      });
树数据的scheema部分如下所示:

tree_data: {
    parent_tag: {type: String},
    parent_share_hash: {type: String, required: false, trim: true},
    direct_children: [{share_hash: {type: String, required: true, trim: true}, nicname: {type: "string", trim: true} }],
    total_children: {level: [Number]},
},

您需要在元素上调用
markModified
,因为数组(或对象、混合类型等)在其内容更改时不会自动标记

看看


您是否在模型中定义了级别子对象?编辑以添加scheemain数据库级别被列为类型“Array”有趣的是:当我添加时:parent.tree\u data.total\u children.level.push(212341234);该元素将显示在数据库中。当检查元素时:就在.save,parent.tree\u data.total\u children.level之前看起来是这样的:0:1 1:212341234 2:212341234在数据库中看起来是这样的:0:0 1:212341234 2:212341234这是疯狂银行!parent.markModified('tree_data.direct_children');虽然不起作用,但“树数据”起作用了tree\u data.direct\u children.level'甚至“tree\u data.direct\u children.level[0]”也不起作用。我认为这是一个问题,认为即使用另一个覆盖模型obj的整个级别数组,也不会使它在数据库中发生更改
  parent.tree_data.parent_tag = "dev";
  parent.tree_data.total_children.level[0]++;
  parent.tree_data.direct_children.push({share_hash: result.share_hash, nicname: result.nicname});
  parent.val = parent.val + 0.4;


  parent.markModified('tree_data.direct_children'); // if that doesnt work, try: paremt.markModified('tree_data')


  parent.save(function(err){
    if (err){
      console.log(err);
    }
  });