我在ASP.NET MVC WebAPI控制器中使用最新的MongoDB C#驱动程序。
我打电话时没有收到错误:
collection.Update(Query<T>.EQ(e => e.Id, entity.Id),
MongoDB.Driver.Builders.Update<T>.Replace(entity), WriteConcern.Acknowledged)
但据报道,受影响的文档数量为0。
如果我直接针对控制器运行UnitTest(即,它没有托管或运行在任何服务器下。当我这样做时,只需通过在UnitTest中实例化控制器,将其视为普通类),那么一切都会按预期进行。
所以我只有在我的网站被托管时才有这个问题。
更多:如果我创建了一个新对象,然后尝试修改创建的对象并调用上面的代码,那么更新就会成功。
示例:如果我在WebAPI控制器上调用Post来创建一个运行以下代码的对象:
MongoConnection.Collection.Insert(value, WriteConcern.Acknowledged)
然后我修改这个对象,并在我的WebAPI控制器上调用Post,该控制器运行第一块代码:
collection.Update(Query<T>.EQ(e => e.Id, entity.Id),
MongoDB.Driver.Builders.Update<T>.Replace(entity), WriteConcern.Acknowledged)
然后更新成功。
很抱歉没有明确的问题:我做错了什么吗?有什么想法可以弄清楚实际的失败是什么?有没有一种方法可以调试对MongoDB的调用?
还有一条信息。我们正在使用Azure中的MongoLab来托管我们的MongoDB回购。
检查表中的文档(对象)结构,并确保它与要发送到数据库进行更新的结构匹配。
我的更新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": ""
}
因此,Query匹配了一个文档,但文档结构不匹配。