MongoDB C#驱动程序-执行UPSERT时,2个数据库命中,而不是1个

MongoDB C#驱动程序-执行UPSERT时,2个数据库命中,而不是1个,mongodb,mongodb-.net-driver,upsert,Mongodb,Mongodb .net Driver,Upsert,我正在使用MongoDB(2.0.0)的最新官方C#包装 (mongo db v3.0.3版) 我的模型是: public class MovieRent { public int MovieCode { get; set; } public int RentStatus { get; set; } } 我的方法会更新电影租赁状态,如果电影不存在,则会输入一个新文档(upsert): 第二个是: update movies.movierents query: { MovieC

我正在使用MongoDB(2.0.0)的最新官方C#包装 (mongo db v3.0.3版)

我的模型是:

public class MovieRent
{
    public int MovieCode { get; set; }

    public int RentStatus { get; set; }
}
我的方法会更新电影租赁状态,如果电影不存在,则会输入一个新文档(upsert):

第二个是:

update movies.movierents query: { MovieCode : "3" } update: { $set: { RentStatus: "1" } }
command movies.$cmd command: update { 
    update: "movierents", 
    ordered: true, 
    updates: [ 
        { 
            q: { MovieCode: "3" }, 
            u: { $set: { RentStatus: "1" } }, 
            upsert: true 
        } ] }
这似乎有很多db命中率(两倍于(-:)。因为我只需通过mongo shell使用一个命令即可实现相同的更新,如下所示:

db.movierents.update(
    { MovieCode:"3" },
    { 
        $set: { RentStatus: "1" }
    },
    { upsert: true }
)
这实际上只会导致mongo跟踪中的一个条目,而不是使用C#驱动程序时的两个条目


C#驱动程序是这样设计的还是我在这里遗漏了什么?

您使用的是服务器的哪种版本?我根本无法复制这一点。使用MongoDB 3.0,我在使用shell和.NET驱动程序时看到两行代码。此外,如果您从使用$set改为使用$inc,您可以通过确保该值没有增加两次。我只看到一行具有写入属性。还有一些其他行,但它们是连接开始/结束等。重要的是我看到一行写入。我正在使用RoboMongo执行shell命令。您似乎在问日志记录问题。当您使用驱动程序时,如果您改为$inc,则对于$set,值是增加两次还是只增加一次?这将证明是否实际发生了两次写入。我不能说Robomongo做了什么,但它可能没有使用写入命令和旧式op协议写入,这可能只导致一行。
db.movierents.update(
    { MovieCode:"3" },
    { 
        $set: { RentStatus: "1" }
    },
    { upsert: true }
)