簡體   English   中英

mongodb如何進行批量更新和刪除操作?

[英]How update and delete bulk operation in mongodb?

我正在構建一個任務管理應用程序,其中只有管理員可以刪除用戶。 當管理員刪除用戶時,我想將刪除的用戶任務分配給他的 assignby 用戶。

{
  _id: new ObjectId("63bad43ee5d01d4cc13d58b2"),
  title: 'Test task',
  completed: false,
  urgent: false,
  assignedBy: new ObjectId("63afc89d7e3da6e5d996d415"), // ex: john
  asignTo: new ObjectId("63bac632f2f1830832d229a4"), // ex: devid
  __v: 0
}

當我從數據庫中刪除 devid 用戶時,我想將他的任務分配給 john 並保存任務

{
  _id: new ObjectId("63bad43ee5d01d4cc13d58b2"),
  title: 'Test task',
  completed: false,
  urgent: false,
  assignedBy: new ObjectId("63afc89d7e3da6e5d996d415"), // ex: john
  asignTo: new ObjectId("63afc89d7e3da6e5d996d415"), // ex: john
  __v: 0
}

我認為您正在尋找交易以避免丟失數據。

所以你可以嘗試一些類似的東西(不是真正的代碼):

const updateAndDelete = async (userToRemove) => {
    const session = await db.startSession()
    try {
        session.startTransaction();
        const user = await User.findById(userToRemove, {session: session})
        const {assignedBy} = user
        await user.remove({session: session})
        await Task.updateMany({asignTo: userToRemove}, {asignTo: assignedBy}, {session: session})
        await session.commitTransaction();
    } catch(e) {
        await session.abortTransaction();
    }
    session.endSession();
}

如果一切正常,您提交事務並保存所有更改( if需要,您也可以添加一些異常),否則您可以回滾並且不會丟失任何數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM