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

时间:2015-06-02 13:20:50

标签: mongodb mongodb-.net-driver upsert

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

我的模特是:

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

    public int RentStatus { get; set; }
}

我的方法更新了电影租借状态,如果电影不存在,则输入新文件(upsert):

public async Task UpdateMovieRent(MovieRent rent)
{
    var rents = _Database.GetCollection<MovieRent>("movierents");
    var builder = Builders<MovieRent>.Update;
    var update = builder.Set(m => m.RentStatus, rent.RentStatus);
    var options = new UpdateOptions { IsUpsert = true };
    await rents.UpdateOneAsync<MovieRent>(m => m.MovieCode == rent.MovieCode, update, options);
}

查看服务器的跟踪信息(运行mongod.exe -v)时,我看到正在执行两个命令。
第一个是:

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 }
)

在使用C#驱动程序时,确实只会导致mongo跟踪中的一个条目,而不是两个条目。

C#驱动程序是如何设计的,还是我错过了什么?

0 个答案:

没有答案