我正在使用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#驱动程序是如何设计的,还是我错过了什么?