using MongoDB.Bson.Serialization; using MongoDB.Driver; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; namespace MongoSample { class Program { static void Main(string[] args) { var client = new MongoClient("mongodb://localhost:27017/"); var db = client.GetDatabase("testing"); var collection = db.GetCollection("entries"); var first = new Sample() { EntryName = "Common", ReferenceComponents = new List() { new ReferenceComponents() { Name = "Animal", Ref = "Cat/1234" }, new ReferenceComponents() { Name = "Animal", Ref = "Dog/1234"}, new ReferenceComponents() { Name = "Plant", Ref = "Tomato/1234"} } }; var second = new Sample() { EntryName = "Common", ReferenceComponents = new List() { new ReferenceComponents() { Name = "Animal", Ref = "Elephant/1234" }, new ReferenceComponents() { Name = "Animal", Ref = "Jaguar/1234"}, new ReferenceComponents() { Name = "Innanimate", Ref = "Rock/1234"} } }; collection.InsertOne(first); collection.InsertOne(second); var filter = Builders.Filter.Where(item => item.EntryName == "Common"); Expression>> projection = (entry) => entry .ReferenceComponents .Where(item => item.Name == "Animal"); var aggregationPipelin = collection .Aggregate() .Match(filter) .Project(projection); var result = aggregationPipelin.ToCursorAsync().GetAwaiter().GetResult(); // Here I am expecting the Reference components with the name Animal // but insted I get an exception :( } } public class Sample { public string EntryName { get; set; } public List ReferenceComponents { get; set; } } public class ReferenceComponents { public string Name { get; set; } public string Ref { get; set; } } }