@@ -50,10 +50,12 @@ public void TestExplainFromLinqQueryEqualsExplainFromCursor()
5050 var queryExplain = _collection . FindAs < C > ( Query . And ( Query . EQ ( "X" , 2 ) , Query . EQ ( "Y" , 1 ) ) ) . SetLimit ( 1 ) . Explain ( ) ;
5151
5252 // millis could be different, so we'll ignore that difference.
53- linqExplain . Remove ( "millis" ) ;
54- queryExplain . Remove ( "millis" ) ;
55- linqExplain . Remove ( "executionTimeMillis" ) ;
56- queryExplain . Remove ( "executionTimeMillis" ) ;
53+ RemoveKey ( linqExplain , "millis" ) ;
54+ RemoveKey ( queryExplain , "millis" ) ;
55+ RemoveKey ( linqExplain , "executionTimeMillis" ) ;
56+ RemoveKey ( queryExplain , "executionTimeMillis" ) ;
57+ RemoveKey ( linqExplain , "executionTimeMillisEstimate" ) ;
58+ RemoveKey ( queryExplain , "executionTimeMillisEstimate" ) ;
5759
5860 Assert . AreEqual ( linqExplain , queryExplain ) ;
5961 }
@@ -65,10 +67,12 @@ public void TestVerboseExplainFromLinqQueryEqualsVerboseExplainFromCursor()
6567 var queryExplain = _collection . FindAs < C > ( Query . And ( Query . EQ ( "X" , 2 ) , Query . EQ ( "Y" , 1 ) ) ) . SetLimit ( 1 ) . Explain ( true ) ;
6668
6769 // millis could be different, so we'll ignore that difference.
68- linqExplain . Remove ( "millis" ) ;
69- queryExplain . Remove ( "millis" ) ;
70- linqExplain . Remove ( "executionTimeMillis" ) ;
71- queryExplain . Remove ( "executionTimeMillis" ) ;
70+ RemoveKey ( linqExplain , "millis" ) ;
71+ RemoveKey ( queryExplain , "millis" ) ;
72+ RemoveKey ( linqExplain , "executionTimeMillis" ) ;
73+ RemoveKey ( queryExplain , "executionTimeMillis" ) ;
74+ RemoveKey ( linqExplain , "executionTimeMillisEstimate" ) ;
75+ RemoveKey ( queryExplain , "executionTimeMillisEstimate" ) ;
7276
7377 Assert . AreEqual ( linqExplain , queryExplain ) ;
7478 }
@@ -84,5 +88,24 @@ public void TestTakeZeroQueriesCannotBeExplained()
8488 {
8589 Assert . Throws < NotSupportedException > ( ( ) => _collection . AsQueryable < C > ( ) . Take ( 0 ) . Explain ( ) ) ;
8690 }
91+
92+ private void RemoveKey ( BsonValue value , string key )
93+ {
94+ if ( value . IsBsonDocument )
95+ {
96+ value . AsBsonDocument . Remove ( key ) ;
97+ foreach ( var element in value . AsBsonDocument )
98+ {
99+ RemoveKey ( element . Value , key ) ;
100+ }
101+ }
102+ else if ( value . IsBsonArray )
103+ {
104+ foreach ( var item in value . AsBsonArray )
105+ {
106+ RemoveKey ( item , key ) ;
107+ }
108+ }
109+ }
87110 }
88111}
0 commit comments