Mongodb更新失败,没有错误

时间:2014-10-09 06:44:13

标签: c# asp.net-mvc mongodb asp.net-web-api mongodb-.net-driver

我在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存储库。

1 个答案:

答案 0 :(得分: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": ""
}

因此查询与文档匹配,但文档结构不匹配。