У меня есть конвейер агрегации, который нужно выполнить с помощью IAggregateFluent.
Вот отображение классов с БД
public class Card
{
public ObjectId Id { get; set; }
public string CardNumber { get; set; }
public string CustomerId { get; set; }
public decimal BalanceAmount { get; set; }
public string Currency { get; set; }
public List<CardTransaction> Transactions { get; set; }
}
и CardTransaction as
public class CardTransaction
{
//public ObjectId Id { get; set; }
public DateTime TransactionDate { get; set; }
public decimal InitialBalance { get; set; }
public decimal FinalBalance { get; set; }
public decimal TransactionAmount { get; set; }
public string OrderNumber { get; set; } //Unique for every transaction
}
Как запросить, чтобы получить только CardTransaction (как проекцию в конце), совпадающую с конкретным OrderNumber с использованием Fluent Aggregation.
Это прекрасно работает на оболочке, но перевод на C # не работает без использования BsonDocument
db.cards.aggregate([
{
$match:{
CardNumber:"00000001"
}
},
{
$unwind:"$Transactions"
},
{
$match:{
"Transactions.OrderNumber":"123456789-1"
}
},
{
$project:{
_id:0,
Transactions:1
}
}
])
Пока:
Cards.Aggregate()
.Match(x => x.CardNumber == someCardNumber)
.Unwind<Card,Card>(x => x.Transactions)
.Match(x => x.Transactions.MethodThatReturnsBool
(y=>y.OrderNumber == someOrderNumber))
.Project(p=>p.Transactions).ToList();