2015-10-14 134 views
1

所以我知道這個問題已經被問了很多次了,但我已經查了超過30分鐘,並且我真的找不到我在做什麼錯誤。在NodeJS中更新多個MongoDB文檔似乎不起作用

我想更新我的蒙戈數據

這裏的兩個文件

{ 
    "_id" : ObjectId("561e34c68b7639481c38ce62"), 
    "id" : "1657999143", 
    "timeTakenAt" : 1444820166833.0000000000000000, 
    "userName" : "a", 
    "__v" : 0 
} 

{ 
    "_id" : ObjectId("561e34c68b7639481c38ce63"), 
    "id" : "1659143", 
    "timeTakenAt" : 1444820166833.0000000000000000, 
    "userName" : "b", 
    "__v" : 0 
} 

我想改變用戶名到別的東西的例子。

以JOHN CENA爲例。

這是我正在使用的代碼。

... 
var UserModel = mongoose.model('userSchema', userSchema); 
... 

updateUsers() 

function updateUsers(){ 
    UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}) 
} 

但它不起作用,甚至沒有更改單個文檔。 我還發現,一些人使用

UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, false,true) 

但是,一個給我一個錯誤,所以我想這是從舊版本的代碼。

但是,如果我用

UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}, updateUsers) 

(這顯然循環永遠,因爲它自稱)。每一份文件最終都會以JOHN CENA用戶名進行更新。

我不明白這裏發生了什麼,有誰能幫助我嗎?

編輯:在下面的評論中,用戶建議添加一個空的回調。我做了什麼,現在它按預期工作。我感謝他(@Sergio Tulentsev),我希望這個線程能夠在未來幫助其他人。

+0

事實上,這應該有工作。你使用的是什麼版本(mongodb,node.js,mongoose)? –

+0

如果你提供一個空的回調(雖然這應該是問題),那會怎麼樣? –

+0

@Sergio Tulentsev我已經在3個星期前下載了其中的三個。所以我很確定我有他們所有的最新版本。 編輯:所以我只是添加了一個空的回調,現在它出於某種原因。那麼我的問題現在就解決了,謝謝! – Skum

回答

2

如文檔注意到update,如果你不想提供一個回調,你需要調用返回的Queryexec執行它:

無需等待響應更新文件從MongoDB的,做 不是傳遞一個回調,然後調用exec對返回的查詢

因此,無論您update鏈上的exec呼叫或提供回調:

function updateUsers(){ 
    UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}).exec(); 
} 

OR

function updateUsers(){ 
    UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}, 
     function(err, numAffected) {...}); 
}