You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Go mongo-driver的mtest模拟UpdateOne时,ModifiedCount始终为0如何解决?

解决mtest模拟MongoDB UpdateOne时ModifiedCount始终为0的问题

你遇到的问题是因为mtest.CreateSuccessResponse生成的响应结构不符合MongoDB驱动对UpdateOne返回结果的解析要求。驱动需要从响应的value子文档中读取nModified字段来填充ModifiedCount,直接传入NModified字段无法被正确解析。

正确的解决方案有两种:

1. 使用专门的mtest.CreateUpdateOneResponse方法

mtest提供了针对UpdateOne的专用响应构造方法,直接传入匹配数和修改数即可:

mt.AddMockResponses(mtest.CreateUpdateOneResponse(1, 1))

第一个参数对应MatchedCount,第二个参数对应ModifiedCount,该方法会自动生成符合驱动解析要求的响应结构。

2. 手动构造符合格式的响应结构

如果需要更自定义的响应,可以手动构造包含value子文档的bson结构:

mt.AddMockResponses(bson.D{
    {Key: "ok", Value: 1},
    {Key: "value", Value: bson.D{
        {Key: "n", Value: 1},
        {Key: "nModified", Value: 1},
    }},
})

驱动会从value字段下的nModified读取值赋值给updateResult.ModifiedCount,n则对应MatchedCount。

修改后的完整测试代码

func TestUpdateOneCall(t *testing.T) {
    mt := mtest.New(t, mtest.NewOptions().ClientType(mtest.Mock))
    defer mt.Close()

    mt.Run("Successful Update", func(mt *mtest.T) {
        mt.AddMockResponses(mtest.CreateUpdateOneResponse(1, 1))

        err := UpdateOneCall(mt.Client)

        assert.Nil(t, err, "Should have successfully triggered update")
    })
}

修改后updateResult.ModifiedCount会正确返回1,测试即可通过。

内容的提问来源于stack exchange,提问作者Francis Bartkowiak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:25:19