Description
There appears to be no way to refer to a let variable defined in a lookup, using a lambda expression. I wind up having to create a string based pipeline for the lookup.
// There is no way to refer to a let variable ($$products) from a lambda function. |
// We have to use a BsonDocument (strings unfortunately) to define our lookup pipeline. |
private const string DeliveriesLookupPipelineString = @" |
{$match:{
|
$expr:{
|
$and:[
|
{$in:[""$productId"",""$$products.productId""]},
|
{$eq:[""$deliveryType"",""Sample""]},
|
{$eq:[""$availability"",""Released""]}
|
]
|
}
|
}
|
}
|
"; |
|
|
private static readonly PipelineDefinition<Delivery, Delivery> DeliveriesLookupPipeline = new[] |
{
|
BsonDocument.Parse(DeliveriesLookupPipelineString)
|
};
|
...
|
.Lookup<SearchAugmentedProductType, Delivery, Delivery, IEnumerable<Delivery>,
|
SearchAugmentedProductType>(
|
_deliveries,
|
new BsonDocument { { "products", "$products" } }, |
DeliveriesLookupPipeline,
|
searchAugmentedProductType => searchAugmentedProductType.Deliveries)
|
...
|