我有以下 C# 模型类:
public class Thingy
{
public ObjectId Id { get; set; }
public string Title { get; set; }
public DateTime TimeCreated { get; set; }
public string Content { get; set; }
public string UUID { get; set; }
}
以及以下 ASP.MVC 控制器操作:
public ActionResult Create(Thingy thing)
{
var query = Query.EQ("UUID", thing.UUID);
var update = Update.Set("Title", thing.Title)
.Set("Content", thing.Content);
var t = _collection.Update(query, update, SafeMode.True);
if (t.UpdatedExisting == false)
{
thing.TimeCreated = DateTime.Now;
thing.UUID = System.Guid.NewGuid().ToString();
_collection.Insert(thing);
}
/*
var t = _collection.FindOne(query);
if (t == null)
{
thing.TimeCreated = DateTime.Now;
thing.UUID = System.Guid.NewGuid().ToString();
_collection.Insert(thing);
}
else
{
_collection.Update(query, update);
}
*/
return RedirectToAction("Index", "Home");
}
此方法执行更新或插入。如果需要进行插入,则必须设置 UUID 和 TimeCreated 成员。如果需要进行更新,则必须单独保留 UUID 和 TimeCreated,但必须更新成员 Title 和 Content。
注释掉的代码有效,但似乎不是最有效的。当它调用 FindOne 时,即是对 mongodb 的一次访问。然后,如果它转到 else 子句,它会执行另一个查询和一个更新操作,因此又是 2 次到 mongodb 的行程。
什么是更有效的方法来完成我想要完成的事情?