更新mongoose set子文档

时间:2016-08-11 12:26:37

标签: mongodb mongoose

我有一个有序的清单。我想在中间添加一个列表。我排序没有问题,但修改似乎有点困难。主要目标是找到所有等于发送或更大的数字并更新。我会在找到它们时更新它们,但是我不能在循环中使用它。

function updateNumbersAfterArticles(searchableid, number){
    var m_searchableid = new ObjectId(searchableid);
    m_Kbase_data.findOne( {_id : m_searchableid}, function(err, kbase_data){
    if (kbase_data.Steps.length === 1){
        var updated_step = new m_KbaseScript_schema({step: kbase_data.Steps[0].step + 1, description : kbase_data.Steps[0].description, image : kbase_data.Steps[0].image});
        m_Kbase_data.update({_id : m_searchableid, 'Step._id' : kbase_data.Steps[0]._id },
                {$set: { "Steps.$": updated_step }},
                function(err, updateRows){
                    //if (err) res.status(500);
                    console.log(updateRows);
                }
            );
        return;
    }
    else{
        var updated_step2 = [];
        for (var i = 1; i < kbase_data.Steps.length; i++) {
            if (kbase_data.Steps[i].step >= number){
                console.log("pushed");
                updated_step2.push( new m_KbaseScript_schema({step: kbase_data.Steps[i].step + 1, description : kbase_data.Steps[i].description, image : kbase_data.Steps[i].image}));
            }
        }
        console.log(updated_step2);
        m_Kbase_data.update({_id : m_searchableid, },
                {$set: { "Steps.$": updated_step2 }},
                function(err, updateRows){
                    //if (err) res.status(500);
                    console.log(updateRows);
                }
            );
    }
});

}

当我运行它时,我可以看到所有的推动。它们似乎正确更新。但是,我没有更新数据库。

1 个答案:

答案 0 :(得分:0)

这就是我如何运作的方式。 (我还没有测试过一个物体):

val aggCols = df.schema.collect {
  case StructField(colName, IntegerType, _, _) => avg(colName).as(colName + "_avg")
  case StructField(colName, StringType, _, _) => first(colName).as(colName + "_first")
}