MongoDB C# 驱动程序 - 条件`UpdateDefinition`?

问题描述 投票:0回答:0

更简单的方法是什么?

// var request = ...

var result = MyDbCollection.UpdateOneAsync(
    a => otherConditions && a.MyObject != null,
    Builders<MyDocument>.Update
        .Set(a => a.MyObject!.A, request.A)
        .Set(a => a.MyObject!.B, request.B)
        .Set(a => a.MyObject!.C, request.C));

if (result.ModifiedCount <= 0)
{
    MyDbCollection.UpdateOneAsync(
        a => otherConditions && a.MyObject == null,
        Builders<MyDocument>.Update
            .Set(a => a.MyObject, new MyDocument.MyObject()
            {
                A = request.A,
                B = request.B,
                C = request.C
            }));
}

注意不同的

a.MyObject != null
a.MyObject == null
条件,理想情况下我想做这样的事情 伪代码

MyDbCollection.UpdateOneAsync(
    a => otherConditions
    Builders<MyDocument>.Update
        .Condition(a => a.MyObject != null)
        .Then(builder => builder
            .Set(a => a.MyObject!.A, request.A)
            .Set(a => a.MyObject!.B, request.B)
            .Set(a => a.MyObject!.C, request.C)
        )
        .Else(builder => builder
            .Set(a => a.MyObject, new MyDocument.MyObject()
            {
                A = request.A,
                B = request.B,
                C = request.C
            })
        )

此时我已经浪费了几个小时尝试使用聚合管道来完成此操作,但我不断收到此错误:

System.InvalidCastException:
Unable to cast object of type 'MongoDB.Bson.BsonArray' to type 'MongoDB.Bson.BsonDocument'.

我不再有该代码,因此无法将其复制粘贴到此处。对不起!

mongodb mongodb-.net-driver
© www.soinside.com 2019 - 2024. All rights reserved.