使用MongoDB创建或智能合并

时间:2014-07-16 05:05:03

标签: c# .net mongodb mongodb-.net-driver nosql

我们假设这是我的文件:

public class ElcoRequest
{
    public ObjectId Id { get; set; }

    public int Result { get; set; }

    public List<string> Equations { get; set; }

}

用户向我发送了许多方程式。我正在解决方程并将结果和源方程保存到MongoDB中的文档中。

现在,许多方程可以得到相同的结果。

在db中创建新文档之前,我想首先检查是否存在相同的结果。如果请求的结果存在,只需使用新的等式修改现有结果。像这样:

doc.Equations.add(newOne);

请注意整个过程是多线程的。因此,每个文档都可以从多个线程中修改\删除\插入。在相关数据库上,它提醒我交易。

寻找实施建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要构建一个文档更新,查询现有文档并在找到它时添加方程式。如果它没有插入新文档。您可以使用UpdateFlags.Upsert标志执行此操作:

collection.Update(
    Query.And(Query<ElcoRequest>.EQ(r => r.Id, newRequest.Id),
        Query<ElcoRequest>.EQ(r => r.Result, newRequest.Result)),
    Update<ElcoRequest>.PushAll(r => r.Equations, newRequest.Equations),
    UpdateFlags.Upsert);