Vì bạn không chỉ định một tài liệu ví dụ và ánh xạ lớp cụ thể, câu trả lời dưới đây sẽ sử dụng BsonDocument
nhập dữ liệu mẫu và dữ liệu từ hướng dẫn sử dụng $ lookup:chỉ định nhiều điều kiện tham gia với tra cứu
BsonArray subpipeline = new BsonArray();
subpipeline.Add(
new BsonDocument("$match",new BsonDocument(
"$expr", new BsonDocument(
"$and", new BsonArray {
new BsonDocument("$eq", new BsonArray{"$stock_item", "$$order_item"} ),
new BsonDocument("$gte", new BsonArray{"$instock", "$$order_qty"} )
}
)
))
);
var lookup = new BsonDocument("$lookup",
new BsonDocument("from", "warehouses")
.Add("let",
new BsonDocument("order_item", "$item")
.Add("order_qty", "$ordered"))
.Add("pipeline", subpipeline)
.Add("as", "stockdata")
);
var results = collection.Aggregate()
.Match(new BsonDocument("_id", 1))
.AppendStage<BsonDocument>(lookup).ToEnumerable();
foreach (var x in results)
{
Console.WriteLine(x.ToJson());
}
Xin lưu ý rằng hỗ trợ $ lookup sử dụng PipelineDefinitionBuilder sắp có cho phiên bản 2.8.x. Để biết thêm thông tin, hãy xem CSHARP-2013