2016-04-25 67 views
0

我需要從mongo讀取記錄並從該記錄添加基於信息的新領域(所以我不能做db.my.update()馬上),我想出了這個代碼:MongoDB是db.update更新記錄的最簡單方法嗎?

var id = '5711298cf896b24fa1529d8e'; 
var cursor = db.my.find({_id: ObjectId(id)}) 

if (cursor.count() > 0) { 
    var rec = cursor.next(); 

    var id = rec._id.valueOf() 

    db.my.update({_id: ObjectId(id)}, {$set: {newField: 777}}); 
} 

它的工作原理,但我我正在看它,想知道這是否是最乾淨的方法? 我期待像

var id = '5711298cf896b24fa1529d8e'; 
var cursor = db.my.find({_id: ObjectId(id)}) 

if (cursor.count() > 0) { 
    var rec = cursor.next(); 
    rec.newField = 777; 
    db.my.update(rec); // or even rec.save(); 
} 

我錯過了什麼嗎?

+0

難道你不能簡單地做'db.my.update({_ id:ObjectId('5711298cf896b24fa1529d8e')},{$ set:{newField:777}});'? – chridam

+0

@chridam我在我的問題的第一行給出了答案。 – SmxCde

+0

應該沒有必要先創建一個遊標,[**'update' **](https://docs.mongodb.org/manual/reference/method/db.collection.update/#db- collection-update)操作符將使用查詢作爲更新的選擇標準。與[**'find()'**](https://docs.mongodb.org/manual/reference/method/db.collection.find/#db.collection.find)方法相同的查詢選擇器是可用,所以光標不是必需的 – chridam

回答

0

所以,我現在還不能確定,這是最好的解決辦法,但我想通了如何使TI更好看

var id = '5711298cf896b24fa1529d8e'; 

var cursor = db.my.find({_id: ObjectId(id)}) 

if (cursor.count() > 0) { 
    var rec = cursor.next(); 
    rec.newField = 777; 
    db.my.save(rec); 
} 

我會來到這個較早,但由於某些原因Robomongo搞糊塗了 - 如果你修改recprint()它 - 它不再顯示_id,所以我不知道這是爲什麼。它出現原來mongo控制檯不這樣做。

此外,我想再次澄清:我不知道我能做到這一點就以這種方式

db.my.update({_id: ObjectId('5711298cf896b24fa1529d8e')}, {$set: {newField: 777}}); 

,但我的情況,我想學習如何與記錄工作,如果你有,如果從光標,例如當你需要根據記錄中的數據修改記錄時,比如提取某些內容並將其放在單獨的字段中。

相關問題