2014-10-09 105 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": "" 
} 

所以查询相匹配的文件,但文件结构不匹配