mongo update忽略某些字段或upsert

时间:2017-10-23 09:35:14

标签: c# mongodb

我将我的模型作为通用类型传递给我的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; }
}

1 个答案:

答案 0 :(得分:0)

这里有一个shell代码:

db.yourDb.update(
    <your_query>,
    {
        "$setOnInsert": { "IsDone": <is_done_value> },
        "$set": { "SomeField": "<some_field_value>" }
    },
    {
        upsert: true
    }
)

关键点是,对于现有文档,仅更新SomeField,但如果没有文档与查询匹配,则会插入新文档,并设置IsDoneSomeField。我相信你可以很容易地将这个shell代码转换为C#。