【问题标题】:Changing order of an array in mongoose does not save在猫鼬中更改数组的顺序不会保存
【发布时间】:2020-09-16 09:21:57
【问题描述】:

我正在使用拖放库来更改元素的顺序,并且我需要保存该顺序,以下方法确实更改了文档但不会保存它,我尝试了 doc.save() 和此更新方法,记录的文档顺序已更改,但未在数据库中更新。

module.exports.changeListOrder = async(req, res) => {
        const { id, listID, oldIndex, newIndex } = req.body;
        await Board.findById(id).then(async(doc) => {
            let tmpdoc = doc.lists[oldIndex];
            doc.lists[oldIndex] = doc.lists[newIndex];
            doc.lists[newIndex] = tmpdoc;
            await Board.updateOne({ _id: id }, { $set: { list: doc.lists } })
    
        });
    }

我的模型有

lists: [{ header: String, listItems: Array }]

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    您混淆了 Promise 和异步语法。异步语法是这样的:

    module.exports.changeListOrder = async (req, res) => {
        const { id, listID, oldIndex, newIndex } = req.body;
        const thisBoard = await Board.findById(id);
        
        // this code won't run until thisBoard has returned a value
        let [oldValue, newValue] = [thisBoard.lists[oldIndex], thisBoard.lists[newIndex];
        thisBoard[oldIndex] = newValue;
        thisBoard[newIndex] = oldValue;
    
        let saveOperation = await Board.save(thisBoard);
        
        // console.log(saveOperation);
        // return saveOperation or do something with res()
    
    };
    

    【讨论】:

    • 你有很多我编辑的错误,但结果是一样的
    【解决方案2】:
    module.exports.changeListOrder = async(req, res) => {
        const { id, listID, oldIndex, newIndex } = req.body;
        const doc = await Board.findById(id);
    
        let [oldValue, newValue] = [doc.lists[oldIndex], doc.lists[newIndex]];
    
        doc.lists.set(oldIndex, newValue);
        doc.lists.set(newIndex, oldValue);
    
        await doc.save();
    };
    

    这是工作代码,问题是 Mongoose 没有为数组索引创建 getter/setter;没有它们,猫鼬永远不会收到更改通知,因此不知道要保留新值,因此您必须使用 set()

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 1970-01-01
      • 2018-07-21
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 2019-08-20
      • 2012-09-01
      相关资源
      最近更新 更多