MongoDB更新失败,无错误



我在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匹配了一个文档,但文档结构不匹配。

相关内容

最新更新