Hi Craig. Pardon the obfuscation of field codes below, but here are the C# class definitions
public class PEntity
{
public int pField1 { get; set; }
public int pField2 { get; set; }
public int pField3 { get; set; }
public int pField4 { get; set; }
public int pField5 { get; set; }
public int pField6 { get; set; }
public double pField7 { get; set; }
public bool pField8 { get; set; }
public int pField9 { get; set; }
public DateTime pField10 { get; set; }
public int pField11 { get; set; }
public double pField12 { get; set; }
public DateTime pField13 { get; set; }
public int pField14 { get; set; }
}
public class PartEntity
{
public int partField1 { get; set; }
public DateTime partField2 { get; set; }
public double partField3 { get; set; }
public double partField4 { get; set; }
public double partField5 { get; set; }
public double partField6 { get; set; }
public double partField7 { get; set; }
public double partField8 { get; set; }
public double partField9 { get; set; }
public double partField10 { get; set; }
public double partField11 { get; set; }
public int partField12 { get; set; }
public int partField13 { get; set; }
public int partField14 { get; set; }
public int partField15 { get; set; }
public int partField16 { get; set; }
public int partField17 { get; set; }
public int partField18 { get; set; }
public DateTime partField19 { get; set; }
public DateTime partField20 { get; set; }
public DateTime partField21 { get; set; }
public DateTime partField22 { get; set; }
public DateTime partField23 { get; set; }
public DateTime partField24 { get; set; }
}
public class Entity
{
public ObjectId Id { get; set; }
public DateTime Field1 { get; set; }
public int Lookup_ID { get; set; }
public long Field2 { get; set; }
public long Field3 { get; set; }
public double Field4 { get; set; }
public double Field5 { get; set; }
public double Field6 { get; set; }
public double Field7 { get; set; }
public double Field8 { get; set; }
public int Field9 { get; set; }
public int Field10 { get; set; }
public double Field11 { get; set; }
public int Field12 { get; set; }
public double Field13 { get; set; }
public int Field14 { get; set; }
public bool Field15 { get; set; }
public double Field16 { get; set; }
public double Field17 { get; set; }
public bool Field18 { get; set; }
public double Field19 { get; set; }
public int Field20 { get; set; }
public int Field21 { get; set; }
public double Field22 { get; set; }
public bool Field23 { get; set; }
public bool Field24 { get; set; }
public int Field25 { get; set; }
public int Field26 { get; set; }
public double Field27 { get; set; }
public double Field29 { get; set; }
public double Field30 { get; set; }
public List<PartEntity> parts { get; set; }
public List<PEntity> ps { get; set; };
}
Note that I also tried arrays in place of the lists and have tried without the lists altogether.
The is a simple index on "Lookup_ID" that I created in the shell using omething like db.ensureIndex ( { "Lookup_ID": 1 } ) - I did this a few days ago, so I assume this is what I did - it's indexed for sure.
var query = Query<Entity>.EQ(e => e.Lookup_ID, iLookupId); - iLookupId is an integer
followed by looping with foreach over Entities. Note I also tries ToArray and then looped over the array, but sililar timing.
Hope that is enough.