我将我的模型作为通用类型传递给我的repo,因此我知道在upsert时要忽略哪些字段。即如果文档确实存在则忽略这些字段,但如果文档不存在,则插入文档。
在所有例子中,我看到有关更新某些字段的说法,例如
var update = Builders<T>.Update.Set(m => m.IsDone, model.IsDone);
现在我想仅在文档不存在时才插入IsDone
。但是当它存在时,保留db中的值,并更新其他模型字段。
class Repo<T> where T: BaseModel
{
}
class BaseModel
{
string Id { get; set; }
bool IsDone { get; set; }
}
答案 0 :(得分:0)
这里有一个shell代码:
db.yourDb.update(
<your_query>,
{
"$setOnInsert": { "IsDone": <is_done_value> },
"$set": { "SomeField": "<some_field_value>" }
},
{
upsert: true
}
)
关键点是,对于现有文档,仅更新SomeField
,但如果没有文档与查询匹配,则会插入新文档,并设置IsDone
和SomeField
。我相信你可以很容易地将这个shell代码转换为C#。