如何从mongodb中的基值增加并更新许多文档

时间:2018-06-01 18:12:55

标签: node.js mongodb express mongoose

所以我有一个对象数组。每个都是具有值索引的对象。当我将客户端上的索引值更新为0.带有旧索引的mongo doc使用新索引0更新,其他文档获得该索引+1 - 与splice相同的前提。

基本上现在,我正在查询旧索引并存储id以便稍后回忆。

然后我将所有其他索引更新为一个。

然后我将旧id设置为新索引。但是,它不起作用。它会使'index'错误地增加所有文档。我需要它为每个后续文档的实际值newIndex ++增加'index'。

或者......如果还有另一种我没见过的方式。

    const {_id} = req.body.user;
    const { oldIndex, newIndex } = req.body.data;

    const keepIndex = await Tasks.find({_user: _id, index: oldIndex}).exec();

    const saveID = keepIndex[0]._id;
    let counter = newIndex;
    const updateIndexId = await Tasks.updateMany({_user: _id, index: {$gte : newIndex} }, {$inc : {'index' : 1} })
        .where('created_at')
        .gt(moment().startOf('day'))
        .lt(moment().endOf('day')).exec();

    const finalUpdate = await Tasks.updateOne({_id: saveID }, { $set : {'index': newIndex}}).exec();

1 个答案:

答案 0 :(得分:0)

好的....所以我没有沿着这条路走下去。事实证明,LOL太难了。

相反,我从reducer获得了状态,并使用更新状态执行了axios post请求。它无论如何都只更新数据库中的索引。也许不是最好的代码:D

app.post('/api/update_task_index', async (req, res) => {
        req.body.items.map(async (x, index) => {
            Tasks.update({ _id: x._id }, { $set: { index: index } }).exec();
        });
});