簡體   English   中英

MongoDb NodeJS驅動程序findOneAndUpdate無法正常工作

[英]MongoDb NodeJS driver findOneAndUpdate not working atomically

我有一個函數,應該從mongo數據庫中按“ ID”查找問題並將其返回,如果找不到,它將創建一個問題,然后將其返回。 它是我代碼中唯一能夠在數據庫中創建新問題實體的功能。 它在這里:(順便說一句,我正在使用官方的MongoDb驅動程序用於nodeJs)

function getQuestionEntity(questionID, cb){
    const questions = db.collection('questions')

    questions.findOneAndUpdate(
        {ID: questionID},
        {$setOnInsert: 
            {
                ID: questionID,
                rating: 1.5,
                options: 4,
                answeredRight: 0,
                answeredWrong: 0

            }
        },
        {
            returnOriginal: false,
            upsert: true
        },
        (err, r)=>{
            if(err){throw new Error(err)}
            cb(r.value)
        }
    )
}

我已經讀過findOneAndUpdate是一個原子操作,這意味着即使我異步循環使用此函數到末尾,我仍然不會在數據庫中得到兩個具有相同“ ID”字段的問題實體,但這正是發生。

我的代碼有什么問題嗎? 我的假設錯了嗎?

不要設置文檔的ID兩次,那么您將以如下形式結束:

 questions.findOneAndUpdate(
   {ID: questionID},
   {$set: {rating: 1.5, options: 4, answeredRight: 0, answeredWrong: 0}}, 
   {upsert: true},
    (err, r)=>{
        if(err){throw new Error(err)}
        cb(r.value)
    }
   )

我尚未在nodejs中測試此代碼; 不要使用$ setOnInsert,因為它僅在插入時才起作用,並且在文檔已經存在時也不會更新鍵。

暫無
暫無

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

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