2016-12-28 37 views
0

我的mongodb文檔如下所示。文檔在mongodb中沒有正確更新

{"studid":"123", "name":"abc"} 

我想更新這個文件如下。

{"studid":"123", "name":"abc", "class":"five", "sec":"b"} 

爲了實現這一點,我寫了如下代碼並傳遞查詢和字段。

名字 - "studreg",查詢 - {"studid":"123"}和現場 - "class":"five", "sec":"b"

exports.modify = function(name,query,field) { 
    return new Promise(function(resolve,reject){ 
     var updateStr = '{$set:{'+field+'}}'; 
     console.log('updateStr: ' + updateStr); 
     dbase.collection(name,function(err,table){ 
      table.findAndModify(query,[[_id,desc]],updateStr,{w:1, new:true},function(err,result){ 
       if (err) reject(err); 
       else 
        resolve(result); 
      }); 
     }); 
    }); 
}; 

作爲輸出我得到下面的打印我的瀏覽器窗口,當我調用修改方法的消息。

{"lastErrorObject":{"updatedExisting":true,"n":1},"value":{"_id":"585ce7d9bef96722642adfeb"},"ok":1} 

在數據庫中,當我試圖找到它僅顯示ID字段中的文件,而不是其他任何領域。你能讓我知道我做錯了什麼嗎?

回答

0

問題解決了。 Rahul提到的問題是解析updateStr。當我調用方法時使用JSON.parse('{\「$ set \」:{'+ field +'}}')和JSON.parse(query)時,我得到了預期的結果。

1

docs

它說,當你使用的update字段必須是對象,而不是string

所以你的輸入字段必須是現場{"class":"five", "sec":"b"}

嘗試這樣

exports.modify = function(name,query,field) { 
    return new Promise(function(resolve,reject){ 
     var updateObj = {$set: field}; //field must be object 
     console.log('updateStr: ' + updateStr); 
     dbase.collection(name,function(err,table){ 
      table.findAndModify(query,[['_id','desc']],updateObj,{upsert: true},function(err,result){ 
       if (err) reject(err); 
       else 
        resolve(result); 
      }); 
     }); 
    }); 
}; 

還有一件事我沒有看到_id,必填字段爲mongodb document在你給出document

+0

以上建議不起作用 –

+0

你有什麼錯誤嗎? –

+0

文檔中這個'_id'字段怎麼樣? –

0

我認爲Jyothi的分析是正確的,但該字段以字符串形式出現,需要轉換爲對象。在我看來,只是創建updateStr作爲問題,然後使用JSON.parse(updateStr)來獲取該對象的版本。

exports.modify = function(name,query,field) { 
    return new Promise(function(resolve,reject){ 
     var updateStr = '{$set:{'+field+'}}'; 
     console.log('updateStr: ' + updateStr); 
     var updateObj = JSON.parse(updateStr); 
     dbase.collection(name,function(err,table){ 
      table.findAndModify(query,[[_id,desc]],updateObj,{w:1, new:true},function(err,result){ 
       if (err) reject(err); 
       else 
        resolve(result); 
      }); 
     }); 
    }); 
}; 

而事實上,它是刪除所有其他變量,但_id只是證明你updateStr不解析爲它應該是點。

+0

我嘗試了您評論中提到的兩個選項。但它仍然不起作用。而且,歸檔變量被用在封裝在{}中的updateStr中。我嘗試在調用findAndModify時使用JSON.parse同時調用query和updateStr。它仍然沒有工作。我沒有得到任何錯誤,除了我上面的帖子中顯示的消息。 –