我将使用 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即为卡片交易
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
}
我该如何使用Fluent Aggregation查询以获取仅与特定OrderNumber匹配的CardTransaction(作为最终投影)?
这在shell上完美地工作,但将其转换为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();
IQueryable<IEnumerable<Transaction>>
。我该如何提取交易?(对LINQ不熟悉) - Rakshith Murukannappa