如何使用 LINQ to MongoDb 将文档中另一个数组中的数组中的元素 'Find And Push'

How to 'Find And Push' element in an array inside of another array in a document using LINQ to MongoDb

我想使用带有最新 MongoDb 驱动程序的 LINQ 将一个元素推送到文档中另一个数组中的数组中

代码如下:

public class Contract : BaseDocument
{
    public ObjectId Id {get;set;}
    ...
    public List<Payment> Payments {get;set;}
}

public class Payment : BaseDocument
{
    public ObjectId Id {get;set;}
    public double TotalPaymentAmount {get;set;}
    public DateTime PaymentWorthDate {get;set;}
    ...
    public List<PaymentTransaction> PaymentTransactions {get;set;}
}

public class PaymentTransaction 
{
    public double AmountPaid {get;set;}
    public DateTime TransactionDateTime {get;set;}
}

那么如何使用 'LINQ Expression' 将新 PaymentTransaction 推送到特定 Contract 中的特定 Payment

谢谢!

当您尝试更新文档时,

LINQ 代表语言集成查询,因此实际上您需要 UpdateOne 方法。由于您有多个嵌套数组,您可以利用常规查询来识别 Contract 以及 $ positional operator 以指示应修改哪个 Payment(嵌套对象)。

.NET MongoDB 驱动程序提供了一种特殊的语法,您可以将 -1 作为索引传递,以指示将根据过滤条件识别该项目。尝试:

var filterBuilder = Builders<Contract>.Filter;
var filter = filterBuilder.Eq(x => x.Id, contractId) &
                filterBuilder.ElemMatch(doc => doc.Payments, el => el.Id == paymentId);

var updateBuilder = Builders<Contract>.Update;
var update = updateBuilder.Push(doc => doc.Payments[-1].PaymentTransactions, new PaymentTransaction());

col.UpdateOne(filter, update);