2014-10-09 121 views
3

我在ASP.NET MVC WebAPI控制器中使用最新的MongoDB-C#驅動程序。Mongodb更新失敗,沒有錯誤

我沒有收到當我打電話的錯誤:

collection.Update(Query<T>.EQ(e => e.Id, entity.Id), 
    MongoDB.Driver.Builders.Update<T>.Replace(entity), WriteConcern.Acknowledged) 

但受影響的文件報告數爲0

如果我直接對控制器運行單元測試(即它不是託管。或者在任何服務器下運行,只要在我的UnitTest中通過實例化控制器來處理它就像是一個普通的類),當我這樣做時,一切都按預期工作。

所以我只有這個問題,而我的網站託管。

更多:如果我創建一個新的對象,然後嘗試修改該創建的對象並調用上述代碼比更新成功。

示例:如果我打電話後我的WebAPI控制器上創建和運行這個代碼的對象:

MongoConnection.Collection.Insert(value, WriteConcern.Acknowledged) 

然後我修改該對象,並調用張貼它運行的代碼的第一個塊我的WebAPI控制器上:

collection.Update(Query<T>.EQ(e => e.Id, entity.Id), 
    MongoDB.Driver.Builders.Update<T>.Replace(entity), WriteConcern.Acknowledged) 

然後更新成功。

感謝您的幫助!

UPDATE 對不起缺乏明確的問題:我做錯了什麼?任何想法找出什麼是實際的失敗是?有沒有辦法調試到MongoDB的調用?

另一條信息。我們在Azure中使用MongoLab來託管我們的MongoDB回購。

+0

你的問題是什麼? – i3arnon 2014-10-09 10:02:31

+3

聽起來好像查詢不匹配文檔 – 2014-10-09 18:32:40

+0

當我自己運行查詢時,我找回了預期的數據。請注意,使用相同的Id並且不使用託管解決方案,所有工作都針對相同的mongoDB實例。 有沒有更好的方法來調試這些東西,而不僅僅是設置單個調用變量? – dannydwarren 2014-10-11 14:48:47

回答

1

檢查表中的文檔(對象)結構,並確保它與您要發送到數據庫進行更新的結構相匹配。

我的更新的ID是匹配的,但JSON結構沒有。這導致更新失敗了。不知道爲什麼會這樣,但現在所有文檔都使用相同的結構編輯工作正常。

舊文檔結構(更新失敗):

{ 
    "_id": "54361fb2ab9c1e1b04514731", 
    "Name": "New Name: 10/8/2014 10:40:03 PM", 
    "HomeTown": "Carlsbad", 
    "Ratings": [], 
    "IsArchived": false, 
    "PicturePath": "", 
    "MatchWins": 0, 
    "MatchLosses": 0, 
    "GameWins": 0, 
    "GameLosses": 0, 
    "TotalGames": 0, 
    "Matches": [], 
    "WebcamImage": null 
} 

當前文檔結構(更新成功:

{ 
    "_id": { 
     "$oid": "54362a35ab9c2025287025d2" 
    }, 
    "_t": [ 
     "ModelBase", 
     "Player" 
    ], 
    "Name": "Name Changed: 12/17/2014 8:58:23 PM", 
    "HomeTown": "Carlsbad", 
    "Ratings": [], 
    "PicturePath": "" 
} 

所以查詢相匹配的文件,但文件結構不匹配